a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle基礎(chǔ):通過sqlplus執(zhí)行sql語句后的結(jié)果進(jìn)行判斷

2024-08-29 14:01:25
字體:
供稿:網(wǎng)友

這篇文章介紹一下如何對(duì)sqlplus執(zhí)行的sql語句結(jié)果進(jìn)行判斷。

環(huán)境準(zhǔn)備

使用Oracle的精簡(jiǎn)版創(chuàng)建docker方式的demo環(huán)境

常見問題

在sqlplus中執(zhí)行sql語句,如果直接使用命令行的方式調(diào)用時(shí)會(huì)碰到兩個(gè)問題:

  • 問題1: 需要進(jìn)行交互性的輸入
  • 問題2:結(jié)果的判斷不能通過返回值來確認(rèn)

解決方式

腳本調(diào)用里,解決方式如下

  • 問題1可以通過前文提到的Here Document來解決。
  • 問題2,則可以通過對(duì)輸出的判斷來進(jìn)行,因?yàn)镺racle的錯(cuò)誤代碼基本以O(shè)RA-打頭,所以根據(jù)輸出中是否包含ORA-,基本可確認(rèn)是否存在錯(cuò)誤。

執(zhí)行結(jié)果判斷示例

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

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;> EOFSQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 22 05:18:51 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> 3 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> Commit complete.SQL>   STUID STUNAME---------- --------------------------------------------------  1001 liumiaocn  1003 michaelSQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionoracle@e871d42341c0:~$ echo $?0oracle@e871d42341c0:~$

從上文可以看到,三行insert的sql語句由于第二行的主鍵重復(fù),出現(xiàn)錯(cuò)誤,但是最終的結(jié)果使用命令行的方式無法對(duì)結(jié)果進(jìn)行判斷,這是控制臺(tái)方式的常見場(chǎng)景,比如sftp或者ftp等也有此特點(diǎn),一般常用的對(duì)應(yīng)方式無法通過返回值進(jìn)行判斷,只能通過輸出來進(jìn)行判斷。

輸出信息

輸出分為標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤兩種,輸入輸出的FD分別為:

  • 標(biāo)準(zhǔn)輸入:0
  • 標(biāo)準(zhǔn)輸出:1
  • 標(biāo)準(zhǔn)錯(cuò)誤:2

接下來我們看一下上文中的信息那些是標(biāo)準(zhǔn)輸出,哪些是標(biāo)準(zhǔn)錯(cuò)誤:

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;> EOForacle@e871d42341c0:~$ oracle@e871d42341c0:~$ cat output.errororacle@e871d42341c0:~$ oracle@e871d42341c0:~$ cat output.infoSQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 22 05:24:44 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> Commit complete.SQL>   STUID STUNAME---------- --------------------------------------------------  1001 liumiaocn  1003 michaelSQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionoracle@e871d42341c0:~$ 

可以看到錯(cuò)誤信息全在標(biāo)準(zhǔn)輸出中,標(biāo)準(zhǔn)錯(cuò)誤中沒有信息。

重定向標(biāo)準(zhǔn)輸出與錯(cuò)誤判斷

雖然上述信息中可以看到,標(biāo)準(zhǔn)錯(cuò)誤中沒有信息,這里給出的方案是對(duì)應(yīng)常見的控制臺(tái)方式的錯(cuò)誤控制,為了保證標(biāo)準(zhǔn)錯(cuò)誤的信息不被遺漏,需要將標(biāo)準(zhǔn)錯(cuò)誤和重定向到標(biāo)準(zhǔn)輸出中,在bshell中寫法如下:

>輸出文件名稱 2>&1

結(jié)合本文的例子,使用方式如下:

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;> EOForacle@e871d42341c0:~$ oracle@e871d42341c0:~$ cat output.infoSQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 22 05:29:31 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> Commit complete.SQL>   STUID STUNAME---------- --------------------------------------------------  1001 liumiaocn  1003 michaelSQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionoracle@e871d42341c0:~$

結(jié)果判斷

使用grep確認(rèn)是否存在ORA-相關(guān)的信息即可

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到oracle教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 色综合久 | 欧美成人精品在线观看 | 欧美日韩在线观看一区二区三区 | 一区二区三区国产好 | 国产成人精品一区二三区四区五区 | 国产精品国产精品国产 | 超碰男人 | 国产一区二区影院 | 亚洲女人天堂成人av在线 | 成人 在线 | 欧美精品一区二区久久 | 久久22| 久久久久久久久久久九 | 欧美性一区二区三区 | 欧美自拍视频 | 四虎影音| 亚洲福利电影网 | 天天天天天天天操 | 99精品亚洲国产精品久久不卡 | 黄视频在线免费看 | 在线观看毛片网站 | 久久精品国产亚洲 | 欧美在线综合 | 亚洲精品v日韩精品 | 欧美黑人一区 | 荡女妇边被c边呻吟视频 | 日韩在线播放欧美字幕 | 蜜桃一本色道久久综合亚洲精品冫 | 黑色丝袜脚足j国产在线看68 | 国产一区二区三区四区在线观看 | 欧美激情自拍偷拍 | 97综合| www.五月天婷婷 | 国产精品夜夜春夜夜爽久久电影 | 欧洲成人在线观看 | 国产亚洲aaa | av一区二区在线观看 | 一区二区三区久久 | 久久综合久色欧美综合狠狠 | 一级看片 | 成人精品一区二区三区 |