你知道Oracle中exec和call的區(qū)別嗎?
1、先執(zhí)行個測試Sql,檢查一下環(huán)境。
環(huán)境OK。
SQL:
select sysdate from dual
2、call:
使用call 調(diào)用一個系統(tǒng)函數(shù)dbms_output.put_line。
可以看到,可以正常執(zhí)行,并且得到預(yù)期的執(zhí)行結(jié)果。
SQL:
set serveroutput on;--用來看到函數(shù)的輸出
call dbms_output.put_line('use key call');
3、exec:
使用exec調(diào)用一個系統(tǒng)函數(shù)dbms_output.put_line。
可以看到,執(zhí)行時報錯了ORA-00900。
SQL:
execdbms_output.put_line('use key exec');
4、小結(jié):
call可以和sql一樣執(zhí)行;
exec不是sql的關(guān)鍵字,不能像sql一樣執(zhí)行。
小貼士:
exec就是execute的縮寫了
5、說好的call和exec很像,很曖昧了。在哪了
客官稍等,馬上就來:
SQL*Plus上場?。?!
命令:
sqlplus / as sysdba;
6、重復(fù)在Oracle SQL Developer中操作。
可以看到都成功了!
因為在實際的數(shù)據(jù)庫開發(fā)中,不可能在Oracle SQL Developer中執(zhí)行。
大多數(shù)是在PL/SQL腳本中,其它語言,譬如java的代碼中執(zhí)行。
這樣就分不出來這兩個關(guān)鍵字的區(qū)別了。
7、再往里面看看,這兩個關(guān)鍵詞的區(qū)別。
call 在Oracle實際執(zhí)行時沒有變化。因為本來就是Oracle的關(guān)鍵字
exec 在Oracle實際執(zhí)行時,轉(zhuǎn)換成begin exec后面跟的語句塊 end; 可以理解為Oracle為方便使用而引入的語法糖吧。
SQL:
select sql_text from v$sql where sql_text like '%目標(biāo)語句中帶的特殊字符%';