A. oracle怎麼直接執行sql語句
Oracle可以使用SQL Plus進行執行,但是可視化不夠,建議使用另外一個查詢輔助工具PLSQL Developer,使用PLSQL Developer工具裡面各種可視化都很好看出查詢出數據的結果以及可以用這個工具分析SQL的執行分析。
B. 求推薦一本Oracle學習教程
Oracle白金級入門教程網路網盤免費資源在線學習
鏈接: https://pan..com/s/12GelRT8Dr4xy6XtVfK5bmQ
Oracle白金級入門教程 鴻鵠論壇_階段8-RAC高可用集群.rar
鴻鵠論壇_階段7-資料庫性能優化.rar
鴻鵠論壇_階段6-DataGuard容災.rar
鴻鵠論壇_階段5-Oracle備份還原恢復.rar
鴻鵠論壇_階段4-Oracle體系結構.rar
鴻鵠論壇_階段3-PL-SQL編程.rar
鴻鵠論壇_階段2-SQL結構查詢語言.rar
鴻鵠論壇_階段1-Oracle資料庫的安裝與介紹.rar
C. oracle 存儲過程執行動態sql實例
oracle的動態sql是指在語句塊使用execute immediate 執行sql語句,sql語句可以使用存儲過程傳的參數進行拼接,本文針對varchar2和number兩種類型的參數類型,進行sql拼接並執行。
功能:輸入日期區間,銷售數量滿足上限和下限的產品id
1.正常傳值
輸出結果
2.若果number類型的參數傳空,會報ora-00936:缺失表達式,可以在存儲過程中增加對參數null值的判斷
oracle 動態拼接傳入參數,varchar2類型可以使用'''|| IN_START_DTIME || ''' ,number類型可以使用'||IN_DOWN_LIMIT||' ; 拼接的過程需要注意校驗參數的合法性,增加存儲過程的容錯性。臨時表使用了會話級,存儲過程執行完,可以通過查詢存儲過程獲取結果。
D. oracle是用什麼語言是SQL語言嗎
不一樣的。
Oracle資料庫內核是用c編寫的,但是,大部分代碼是在資料庫中執行的,使用PL/SQL和Java(使用嵌入在內核中的jvm)開發。外圍工具(SQLDeveloper,grid控制項)主要使用Java。
MySQL是用C和c++編寫的。它的SQL解析器是用yacc編寫的,但是它使用一個定製的詞法分析器。MySQL可以在很多系統平台上工作。
(4)oracle編程藝術sql擴展閱讀:
Oracle文件結構:
資料庫的物理存儲結構由多種物理文件組成,主要包括數據文件、控制文件、重做日誌文件、歸檔日誌文件、參數文件、密碼文件、警告文件等。
1.控制文件:存儲諸如實例、數據文件和日誌文件等信息的二進制文件。改變系統設置control_files='path'。VCONTROLFILE美元。
2.數據文件:存儲數據。DBF後綴。一個語句:一個表空間用於多個數據文件,一個數據文件用於一個表空間。Dba_data_files/v$丟失。
3.日誌文件:重做日誌文件和Archivelog文件。記錄資料庫修改信息。ALTER系統切換日誌文件;。V$日誌。
4.參數文件:記錄基本參數。Spfilepfile。
5.警告文件:顯示參數background_mp_dest——使用共享伺服器連接。
6.跟蹤文件:顯示參數user_mp_dest——使用專用伺服器連接。
E. oracle plsql什麼時候使用自治事務
了解oracle自治事務
1、什麼是Oracle自治事務
在官方文檔中,是這樣的定義的「Autonomous transactions are independent transactions that can be called from within another transaction.」就是說它被一個事務調用的事務,但它獨立於它的父事務提交或回滾。
下面看一個例子
首先創建一張測試表
www.2cto.com
[sql]
MIKE@ORA11G> create table test(m varchar2(30));Table created.
創建兩個procere,一個是自治事務的,一個是非自治事務的[sql]
create or replace procere auto_proce
as
pragma autonomous_transaction;
begin
insert into test values('autonomous!');
commit;
end;
/
[sql]
create or replace procere nonauto_proceas www.2cto.com
begin
insert into test values('nonautonomous!');commit;
end;
/
先調用nonauto_proce,看一下會發生什麼?
[sql]
SQL> select * from test;
未選定行
SQL> begin
2 insert into test values('test');
3 nonauto_proce;
4 rollback;
5 end;
6 /
PL/SQL 過程已成功完成。
SQL> select * from test;
www.2cto.com
M
------------------------------
test
nonautonomous!
第4行的rollback並沒有回滾,由於nonauto_proce過程不是自治事務,它的提交將父事務中的insert一並提交,造成rollback沒有回滾,即nonauto_proce影響了它的父事務。
下面再看一下auto_proce的情況。
[sql]
SQL> truncate table test;
表被截斷。
SQL> select * from test;
未選定行
SQL> begin
2 insert into test values('test1');
3 auto_proce;
4 rollback;
5 end;
6 /
PL/SQL 過程已成功完成。
SQL> select * from test;
www.2cto.com
M
------------------------------
autonomous!
由於auto_proce過程是自治事務,它的commit並沒有影響到其父事務的rollback。從結果中,已經證明了這一點。
通過這個例子,可以看出自治事務對其父事務並不會造成任何影響。
自治事務一般會被用於:
a 匿名塊
b 本地、對立或打包的函數或過程
c 對象類型的方法
d 觸發器
2、自治事務與父事務(調用者)的關系
創建一個過程,在commit前休眠10秒,以便查看系統中的一些信息。
[sql]
create or replace procere auto_p1
as
pragma AUTONOMOUS_TRANSACTION;
begin
insert into test values('test2');
dbms_lock.sleep(10);
commit;
end;
查看會話的SID(會話A)
www.2cto.com
[sql]
SQL> conn sys/admin as sysdba
已連接。
SQL> select sid from v$mystat where rownum=1;SID
----------
144
通過sqlplus打開另一個連接(會話B),查看會話信息[sql]
SQL> select sid, username, status from v$session;SID USERNAME STATUS---------- ------------------------------ --------138 ACTIVE143 SYS INACTIVE144 SYS INACTIVE145 SYS INACTIVE147 SYS ACTIVE149 ACTIVE151 ACTIVE157 ACTIVE159 ACTIVE160 ACTIVE161 ACTIVEwww.2cto.com
在會話A執行auto_p1
[sql]
SQL> begin
2 auto_p1;
3 end;
4 /
PL/SQL 過程已成功完成。
執行期間在會話B,查看會話信息
[sql]
SQL> select sid, username, status from v$session;SID USERNAME STATUS---------- ------------------------------ --------143 SYS INACTIVE144 SYS INACTIVE145 SYS INACTIVE147 SYS ACTIVE149 ACTIVE151 ACTIVE157 ACTIVE160 ACTIVE161 ACTIVE162 ACTIVE163 ACTIVE並沒有看到新的會話產生,即自治事務auto_p1與其父事務(匿名塊)在同一會話中。
www.2cto.com
3、應用場景
在Tom大師的《Oracle編程藝術》中,提到了這方面的內容 – 記錄錯誤日誌或者消息。想想做過的項目中,的確自治事務主要應用在這方面比較多,不管你的請求是否成功,只要訪問到資料庫,就要記錄在案,使用自治事務是一種比較不錯的方案(當然還有其他方案,因為此處只說自治事務,其他方案略過)。
還有隊列消息等基礎資料庫的消息類系統,也可以使用自治事務來記錄消息的發送,實際上也是日誌的記錄。
下面使用一個簡單的例子,說明一下。
創建兩張表,一張測試表(有主鍵),一張是測試表的錯誤日誌信息表。
[sql]
SQL> create table test1
( id number(8),
msg varchar2(10),
constraint test1_pk primary key(id)
);
表已創建。
[sql]
SQL> create table test1_log
2 ( dat timestamp,
3 err clob
4 );
表已創建。
創建自治事務,用於記錄操作測試表時出現的錯誤信息。
[sql]
SQL> create or replace procere log_err(errinfo varchar2)2 as
3 pragma autonomous_transaction;
4 begin
5 insert into test1_log values(systimestamp, errinfo);6 commit;
7 end;
8 / www.2cto.com
過程已創建。
創建一個過程用於向測試進行插入操作。
[sql]
SQL> create or replace procere insert_test(numid number, msg varchar2)2 as
3 begin
4 insert into test1 values (numid, msg);5 end;
6 /
過程已創建。
向測試表插入數據(沒有錯誤信息的情況)。
[sql]
SQL> begin
2 insert_test(1,'testtest');
3 insert_test(2,'test');
4 exception
5 when others
6 then
7 log_err(dbms_utility.format_error_backtrace);8 raise;
9 end;
10 /
PL/SQL 過程已成功完成。
[sql]
SQL> select * from test1_log;
www.2cto.com
未選定行
錯誤日誌表中沒有信息,測試表中的數據都是正確的。
下面再進行插入操作(違反測試表的主鍵約束,出現錯誤的情況)。
[sql]
SQL> begin
2 insert_test(1,'ffffffff');
3 exception
4 when others
5 then
6 log_err(dbms_utility.format_error_backtrace);7 raise;
8 end;
9 /
begin
*
第 1 行出現錯誤:
ORA-00001: 違反唯一約束條件 (SYS.TEST1_PK)ORA-06512: 在 line 7
[sql]
SQL> set linesize 1000
SQL> select * from test1_log;
www.2cto.com
DAT
ERR--------------------------------30-7月 -12 07.55.26.281000 下午 ORA-06512: 在 "SYS.INSERT_TEST", line 4ORA-06512: 在 line 2
插入操作沒有成功,測試表沒有新插入的數據,但是錯誤日誌表中,記錄個這次插入操作的錯誤信息。
上面的例子非常簡單,運用到應用系統中,還需要根據系統的需求進行改造。
F. Oracle定義事務的SQL語句
SQL>
select
*
from
test_main;
ID
VALUE
----------
--------------------
2
TWO
3
THREE
1
ONE
SQL>
BEGIN
2
--
插入2條同樣的數據,使主鍵重復,引發錯誤後回滾事務.
3
INSERT
INTO
test_main(id,
value)
VALUES
(4,
'FOUR');
4
INSERT
INTO
test_main(id,
value)
VALUES
(4,
'FOUR');
5
COMMIT;
6
EXCEPTION
7
WHEN
OTHERS
THEN
8
dbms_output.put_line('Error
Code
=
'
||
TO_CHAR(SQLCODE)
);
9
dbms_output.put_line('Error
Message
=
'
||
SQLERRM
);
10
--
回滾事務
11
ROLLBACK;
12
END;
13
/
PL/SQL
procere
successfully
completed.
SQL>
select
*
from
test_main;
ID
VALUE
----------
--------------------
2
TWO
3
THREE
1
ONE
SQL>