網頁

2017/8/31

Oracle EXEC和CALL的差異

在Oracle中執行Stored Procedure,我們可以使用EXECUTE(or EXEC)或CALL指令。

EXECUTE my_procedure('hello world');
-- or
CALL my_procedure('hello world');

EXECUTECALL指令雖然都可執行Stored Procedure,但基本有點小差異:

  • EXECUTESQL*Plus指令,而CALL是標準SQL指令,因此CALL在任何資料庫軟體都可使用,而EXECUTE必須操作軟體支援才可使用。
  • CALL所執行的SP參數必須是標準的Oracle資料型態(datatype),不支援PL/SQL才有的資料型態,但EXECUTE支援。
  • EXECUTE不僅可執行SP,還可執行PL/SQL statement,EXECUTE同等於把其引數放在匿名的PL/SQL block中...
    EXECUTE my_procedure('hello world');
    
  • 如果SP不帶參數,則用CALL執行時後面要加上括弧,但EXECUTE不用,例如
    EXECUTE mysp; 
    -- or 
    CALL mysp();
    
    如果用CALL呼叫不帶參數的SP但後面沒加括號,則會發生錯誤:
    ORA-06576: 不是正確的函數或程序名稱
    ORA-06576: not a valid function or procedure name

如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


參考:

沒有留言:

張貼留言