多條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注...