麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Oracle > 正文

Oracle基礎多條sql執行在中間的語句出現錯誤時的控制方式

2020-07-26 13:59:10
字體:
來源:轉載
供稿:網友

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

環境準備

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

  • http://www.companysz.com/article/153533.htm

多行語句的正常執行

對上篇文章創建的兩個字段的學生信息表,正常添加三條數據,詳細如下:

# sqlplus system/liumiao123@XE <<EOF> desc student> 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;> EOFSQL*Plus: Release 11.2.0.2.0 Production on Sun Oct 21 12:08:35 2018Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to:Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit ProductionSQL> Name    Null?  Type ----------------------------------------- -------- ---------------------------- STUID    NOT NULL NUMBER(4) STUNAME     VARCHAR2(50)SQL> no rows selectedSQL> 1 row created.SQL> 1 row created.SQL> 1 row created.SQL> Commit complete.SQL>    STUID STUNAME---------- --------------------------------------------------   1001 liumiaocn   1002 liumiao   1003 michaelSQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production#

多行語句中間出錯時的缺省動作

問題:

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

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

# sqlplus system/liumiao123@XE <<EOFdesc studentdelete from student;select * from student;insert into student values (1001, 'liumiaocn');insert into student values (1001, 'liumiao');insert into student values (1003, 'michael');select * from student;commit;> > > > >    > EOFSQL*Plus: Release 11.2.0.2.0 Production on Sun Oct 21 12:15:16 2018Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to:Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit ProductionSQL> Name    Null?  Type ----------------------------------------- -------- ---------------------------- STUID    NOT NULL NUMBER(4) STUNAME     VARCHAR2(50)SQL> 2 rows deleted.SQL> no rows selectedSQL> 1 row created.SQL> insert into student values (1001, 'liumiao')*ERROR at line 1:ORA-00001: unique constraint (SYSTEM.SYS_C007024) violatedSQL> 1 row created.SQL>    STUID STUNAME---------- --------------------------------------------------   1001 liumiaocn   1003 michaelSQL> SQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production# 

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

WHENEVER SQLERROR

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

WHENEVER SQLERROR {EXIT [SUCCESS | FAILURE | WARNING | n | variable | :BindVariable] [COMMIT | ROLLBACK] | CONTINUE [COMMIT | ROLLBACK | NONE]}

WHENEVER SQLERROR EXIT

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

# sqlplus system/liumiao123@XE <<EOFWHENEVER SQLERROR EXITdesc studentdelete from student;select * from student;insert into student values (1001, 'liumiaocn');insert into student values (1001, 'liumiao');insert into student values (1003, 'michael');select * from student;commit;> > > > > > > > > > EOFSQL*Plus: Release 11.2.0.2.0 Production on Sun Oct 21 12:27:15 2018Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to:Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit ProductionSQL> SQL> Name    Null?  Type ----------------------------------------- -------- ---------------------------- STUID    NOT NULL NUMBER(4) STUNAME     VARCHAR2(50)SQL> 2 rows deleted.SQL> no rows selectedSQL> 1 row created.SQL> insert into student values (1001, 'liumiao')*ERROR at line 1:ORA-00001: unique constraint (SYSTEM.SYS_C007024) violatedDisconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production# 

WHENEVER SQLERROR CONTINUE

使用CONTINUE則和缺省方式下的行為一致,出錯仍然繼續執行

# sqlplus system/liumiao123@XE <<EOFWHENEVER SQLERROR CONTINUEdesc studentdelete from student;select * from student;insert into student values (1001, 'liumiaocn');insert into student values (1001, 'liumiao');insert into student values (1003, 'michael');select * from student;commit;> > > > > > > > > > EOFSQL*Plus: Release 11.2.0.2.0 Production on Sun Oct 21 12:31:54 2018Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to:Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit ProductionSQL> SQL> Name    Null?  Type ----------------------------------------- -------- ---------------------------- STUID    NOT NULL NUMBER(4) STUNAME     VARCHAR2(50)SQL> 1 row deleted.SQL> no rows selectedSQL> 1 row created.SQL> insert into student values (1001, 'liumiao')*ERROR at line 1:ORA-00001: unique constraint (SYSTEM.SYS_C007024) violatedSQL> 1 row created.SQL>    STUID STUNAME---------- --------------------------------------------------   1001 liumiaocn   1003 michaelSQL> Commit complete.SQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production#

Mysql中類似的機制

mysql中使用source是否提供相關的類似機制的問題中,最終引入了Oracle此項功能在mysql中引入的建議,詳細請參看:

  • https://bugs.mysql.com/bug.php?id=73177

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

小結

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美精品一区自拍a毛片在线视频 | 99seav| 综合图区亚洲 | 成人三级视频网站 | 91精品国产乱码久久久久久久久 | 久久精品成人影院 | 精品黑人一区二区三区国语馆 | 久久色播| 中文字幕免费一区 | 亚洲综合色视频在线观看 | 国产va在线观看免费 | 最新av网址在线观看 | a网站在线 | 777午夜精品视频在线播放 | 欧美一级做一级爱a做片性 久久久资源网 | 国产刺激高潮av | 精品中文字幕久久久久四十五十骆 | 91精品国产乱码久久久久 | 亚洲成人在线免费 | 国产免费网站视频 | 久久久鲁 | 国产精品一二区 | 激情九九| 中文字幕激情 | 大号bbwassbigav头交 | 免费a观看| 欧美四级在线观看 | 激情夜色 | 特级毛片免费 | 国产成人高清在线观看 | 国产午夜精品一区二区三区嫩草 | 久久中文免费 | 国产精品久久久乱弄 | 高清国产午夜精品久久久久久 | 中文字幕免费在线观看视频 | 暴力肉体进入hdxxxx古装 | www深夜成人 | 中文字幕在线永久视频 | 久久精品无码一区二区三区 | 粉嫩粉嫩一区二区三区在线播放 | 成人毛片视频在线观看 |