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