久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle基礎:通過sqlplus執行sql語句后的結果進行判斷

161次閱讀
沒有評論

共計 4056 個字符,預計需要花費 11 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章介紹一下如何對 sqlplus 執行的 sql 語句結果進行判斷。

環境準備

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

 https://www.jb51.net/article/153533.htm

常見問題

在 sqlplus 中執行 sql 語句,如果直接使用命令行的方式調用時會碰到兩個問題:

問題 1: 需要進行交互性的輸入
問題 2:結果的判斷不能通過返回值來確認

解決方式

在腳本調用里,解決方式如下

問題 1 可以通過前文提到的 Here Document 來解決。
問題 2,則可以通過對輸出的判斷來進行,因為 Oracle 的錯誤代碼基本以 ORA- 打頭,所以根據輸出中是否包含 ORA-,基本可確認是否存在錯誤。

執行結果判斷示例

這里使用命令行的方式進行驗證,直接拷貝到腳本中即可以使用腳本的方式與 sqlplus 進行集成。

oracle@e871d42341c0:~$ sqlplus system/liumiao123@XE EOF
 desc student
 delete from student;
 select * from student;
 insert into student values (1001, 'liumiaocn');
 insert into student values (1001, 'liumiao');
 insert into student values (1003, 'michael');
 commit;
 select * from student;
SQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 22 05:18:51 2018
Copyright (c) 1982, 2011, Oracle. All rights reserved.
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)
3 rows deleted.
no rows selected
1 row created.
SQL insert into student values (1001, 'liumiao')
ERROR at line 1:
ORA-00001: unique constraint (SYSTEM.SYS_C007024) violated
1 row created.
Commit complete.
 STUID STUNAME
---------- --------------------------------------------------
 1001 liumiaocn
 1003 michael
SQL Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
oracle@e871d42341c0:~$ echo $ 
oracle@e871d42341c0:~$

從上文可以看到,三行 insert 的 sql 語句由于第二行的主鍵重復,出現錯誤,但是最終的結果使用命令行的方式無法對結果進行判斷,這是控制臺方式的常見場景,比如 sftp 或者 ftp 等也有此特點,一般常用的對應方式無法通過返回值進行判斷,只能通過輸出來進行判斷。

輸出信息

輸出分為標準輸出和標準錯誤兩種,輸入輸出的 FD 分別為:

標準輸入:0
標準輸出:1
標準錯誤:2

接下來我們看一下上文中的信息那些是標準輸出,哪些是標準錯誤:

oracle@e871d42341c0:~$ sqlplus system/abcd1234@XE EOF 2 output.error 1 output.info
 desc student
 delete from student;
 select * from student;
 insert into student values (1001, 'liumiaocn');
 insert into student values (1001, 'liumiao');
 insert into student values (1003, 'michael');
 commit;
 select * from student;
oracle@e871d42341c0:~$ 
oracle@e871d42341c0:~$ cat output.error
oracle@e871d42341c0:~$ 
oracle@e871d42341c0:~$ cat output.info
SQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 22 05:24:44 2018
Copyright (c) 1982, 2011, Oracle. All rights reserved.
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)
2 rows deleted.
no rows selected
1 row created.
SQL insert into student values (1001, 'liumiao')
ERROR at line 1:
ORA-00001: unique constraint (SYSTEM.SYS_C007024) violated
1 row created.
Commit complete.
 STUID STUNAME
---------- --------------------------------------------------
 1001 liumiaocn
 1003 michael
SQL Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
oracle@e871d42341c0:~$

可以看到錯誤信息全在標準輸出中,標準錯誤中沒有信息。

重定向標準輸出與錯誤判斷

雖然上述信息中可以看到,標準錯誤中沒有信息,這里給出的方案是對應常見的控制臺方式的錯誤控制,為了保證標準錯誤的信息不被遺漏,需要將標準錯誤和重定向到標準輸出中,在 bshell 中寫法如下:

輸出文件名稱 2 1

結合本文的例子,使用方式如下:

oracle@e871d42341c0:~$ sqlplus system/abcd1234@XE EOF output.info 2 1
 desc student
 delete from student;
 select * from student;
 insert into student values (1001, 'liumiaocn');
 insert into student values (1001, 'liumiao');
 insert into student values (1003, 'michael');
 commit;
 select * from student;
oracle@e871d42341c0:~$ 
oracle@e871d42341c0:~$ cat output.info
SQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 22 05:29:31 2018
Copyright (c) 1982, 2011, Oracle. All rights reserved.
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)
2 rows deleted.
no rows selected
1 row created.
SQL insert into student values (1001, 'liumiao')
ERROR at line 1:
ORA-00001: unique constraint (SYSTEM.SYS_C007024) violated
1 row created.
Commit complete.
 STUID STUNAME
---------- --------------------------------------------------
 1001 liumiaocn
 1003 michael
SQL Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
oracle@e871d42341c0:~$

結果判斷

使用 grep 確認是否存在 ORA- 相關的信息即可

oracle@e871d42341c0:~$ grep ORA- output.info
ORA-00001: unique constraint (SYSTEM.SYS_C007024) violated
oracle@e871d42341c0:~$ echo $
0
oracle@e871d42341c0:~$

總結

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

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計4056字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 广丰县| 萨迦县| 当阳市| 汉阴县| 赣榆县| 肇源县| 屏东县| 从江县| 鲁甸县| 汝南县| 兴城市| 海南省| 津南区| 宁津县| 资阳市| 长垣县| 凤庆县| 邮箱| 玉山县| 开封市| 东至县| 信阳市| 武夷山市| 宝坻区| 武安市| 博野县| 卢龙县| 绿春县| 淮阳县| 枞阳县| 林甸县| 内丘县| 腾冲县| 营口市| 宁陕县| 周宁县| 仁怀市| 安义县| 马关县| 鸡泽县| 静安区|