Oracle基礎 4 sql執行錯誤時的控制方式

2021-08-31 11:54:20 字數 4178 閱讀 2092

多條sql執行時如果在中間的語句出現錯誤,後續會不會直接執行,如何進行設定,以及其他資料庫諸如mysql是如何對應的,這篇文章將會進行簡單的整理和說明。

使用oracle的精簡版建立docker方式的demo環境,詳細可參看:

# sqlplus system/liumiao123@xe 

> select * from student;

> insert into student values (1001, 'liumiaocn');

> insert into student values (1002, 'liumiao');

> insert into student values (1003, 'michael');

> commit;

> select * from student;

> eof

sql*plus: release 11.2.0.2.0 production on sun oct 21 12:08:35 2018

connected to:

oracle database 11g express edition release 11.2.0.2.0 - 64bit production

sql> name null? type

stuid not null number(4)

stuname varchar2(50)

sql>

no rows selected

sql>

1 row created.

sql>

1 row created.

sql>

1 row created.

sql>

commit complete.

sql>

stuid stuname

1001 liumiaocn

1002 liumiao

1003 michael

sql> disconnected from oracle database 11g express edition release 11.2.0.2.0 - 64bit production

問題:

三行insert語句,如果中間的一行出錯,預設的狀況下第三行會不會被插入進去?

我們將第二條insert語句的主鍵故意設定重複,然後進行確認第三條資料是否會進行插入即可。

# sqlplus system/liumiao123@xe <> > > >       

> eof

sql*plus: release 11.2.0.2.0 production on sun oct 21 12:15:16 2018

connected to:

oracle database 11g express edition release 11.2.0.2.0 - 64bit production

sql> name null? type

stuid not null number(4)

stuname varchar2(50)

sql>

2 rows deleted.

sql>

no rows selected

sql>

1 row created.

sql> insert into student values (1001, 『liumiao』)

*error at line 1:

ora-00001: unique constraint (system.sys_c007024) violated

sql>

1 row created.

sql>

stuid stuname

1001 liumiaocn

1003 michael

sql> sql> disconnected from oracle database 11g express edition release 11.2.0.2.0 - 64bit production

結果非常清晰地表明是會繼續執行的,在oracle中通過什麼來對其進行控制呢?

答案很簡單,在oracle中通過whenever sqlerror來進行控制。

whenever sqlerror

新增此行設定,即會在失敗的時候立即推出,接下來我們進行確認:

# sqlplus system/liumiao123@xe <> > > > > > > > 

> eof

sql*plus: release 11.2.0.2.0 production on sun oct 21 12:27:15 2018

connected to:

oracle database 11g express edition release 11.2.0.2.0 - 64bit production

sql> sql> name null? type

stuid not null number(4)

stuname varchar2(50)

sql>

2 rows deleted.

sql>

no rows selected

sql>

1 row created.

sql> insert into student values (1001, 『liumiao』)

*error at line 1:

ora-00001: unique constraint (system.sys_c007024) violated

disconnected from oracle database 11g express edition release 11.2.0.2.0 - 64bit production

使用continue則和預設方式下的行為一致,出錯仍然繼續執行

# sqlplus system/liumiao123@xe <> > > > > > > > 

> eof

sql*plus: release 11.2.0.2.0 production on sun oct 21 12:31:54 2018

connected to:

oracle database 11g express edition release 11.2.0.2.0 - 64bit production

sql> sql> name null? type

stuid not null number(4)

stuname varchar2(50)

sql>

1 row deleted.

sql>

no rows selected

sql>

1 row created.

sql> insert into student values (1001, 『liumiao』)

*error at line 1:

ora-00001: unique constraint (system.sys_c007024) violated

sql>

1 row created.

sql>

stuid stuname

1001 liumiaocn

1003 michael

sql>

commit complete.

sql> disconnected from oracle database 11g express edition release 11.2.0.2.0 - 64bit production

所以目前這只是乙個sqlplus端的強化功能,並非標準,不同資料庫需要確認相應的功能是否存在。

oracle中使用whenever sqlerror進行出錯控制是否繼續,本文給出的例子非常簡單,詳細功能的使用可根據文中列出的usage進行自行驗證和探索。

java面試 4 SQL軍規

注 軍規主要適用於那些大企業,有著併發量大 資料量大的網際網路業務。這類業務架構設計的重點往往是吞吐量,效能優先,對資料庫效能影響較大的資料庫特性較少使用。這類場景的架構方向是 解放資料庫cpu,把複雜邏輯計算放到服務層 服務層具備更好的擴充套件性,容易實現 增機器就擴充效能 資料庫擅長儲存與索引,...

冬令營線上直播學習筆記4 SQL注入報錯注入

1.什麼是報錯注入?在mysql中使用一些指定的函式來製造報錯,後台沒有遮蔽資料庫的報錯資訊,在語法輸入錯誤的時候將資訊輸出前端顯示,我們可以從報錯資訊中獲取資訊。2.報錯注入常用的函式 updatexml xml文件資料進行查詢和修改的xpath函式 extractvalue xml文件資料進行查...

SQL注入基礎 易錯問題彙總

sql注入基礎 易錯問題彙總 1.sql注入本質是什麼 把使用者輸入當做 執行 2.sql注入的條件 使用者可控輸入和原本程式要執行 拼接使用者輸入且當作sql語句去執行 3.order by的作用及含義 order by 用於判斷顯示位,order by 原有的作用是對字段進行乙個排序,在sql注...