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

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 14:01:26
字體:
來源:轉載
供稿:網友

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

環境準備

使用Oracle的精簡版創建docker方式的demo環境

多行語句的正常執行

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

# 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進行自行驗證和探索。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 看91视频 | 一级精品 | 亚洲精品成人久久 | 99精品电影 | 日韩视频精品一区 | 成年免费视频黄网站在线观看 | 欧美黄色一级片视频 | 黄色一级片免费在线观看 | 国产成年人在线观看 | 日本大片在线播放 | 成人在线观看免费观看 | 羞羞电影网 | 免费香蕉成视频成人网 | 免费午夜视频在线观看 | 圆产精品久久久久久久久久久 | 精品国产一区二区三区四区阿崩 | 国产精品久久久久久久久久尿 | 337p日本欧洲亚洲大胆精蜜臀 | 国产精品美女久久久久久不卡 | a黄色片 | 泰剧19禁啪啪无遮挡大尺度 | 日韩视频一区二区三区四区 | 成人午夜免费国产 | 日本黄色一级视频 | 黄色网址在线播放 | 成人 日韩 | 久久av免费观看 | 久久亚洲激情 | 国产亚洲网 | 国产午夜精品一区二区三区免费 | 亚洲无毛av | 成年片在线观看 | 成人午夜视频免费 | 日本成人二区 | 91羞羞| 中文日韩在线 | 最新中文字幕日本 | 在线播放免费人成毛片乱码 | 亚洲精品在线观看免费 | 色妹子久久 | 久草在线资源观看 |