在sqlplus中這兩種方法都可以使用:
exec pro_name(參數1..); call pro_name(參數1..);
區別:
1. 但是exec是sqlplus命令,只能在sqlplus中使用;call為SQL命令,沒有限制.
2. 存儲過程沒有參數時,exec可以直接跟過程名(可以省略()),但call則必須帶上().
Sql代碼
SQL> --創建過程 插入數據
SQL> create or replace procedure pro1 is
2 begin --執行部分
3 insert into mytest values('張三', 'mm');
4 end;
5 /
Procedure created
SQL> exec pro1;
PL/SQL procedure successfully completed
SQL> call pro1;
call pro1
ORA-06576: 不是有效的函數或過程名
SQL> call pro1();
Method called
總結:在調用過程時,應該養成使用call,且要帶上()的習慣。
---------------------
exec是sqlplus的命令,只能在sqlplus中使用。
call是sql命令,任何工具都可以使用,call必須有括號,即例沒有參數
call必須有括號,即例沒有參數
idle> connect /as sysdba
已連接。
sys@PO10>
sys@PO10> create procedure p_test is
2 begin
3 null;
4 end;
5 /
過程已創建。
sys@PO10>
sys@PO10> exec p_test
PL/SQL 過程已成功完成。
sys@PO10> call p_test
2 ;
call p_test
*
第 1 行出現錯誤:
ORA-06576: 不是有效的函數或過程名
sys@PO10> call p_test();
調用完成。
sys@PO10>
exec 只能在SQLPLUS中使用;call可以在任何地方使用
區別
exec是SQL Plus命令,只能在SQL Plus中使用;call為SQL命令,沒有限制.
存儲過程或函數沒有參數時,exec可以直接跟過程名(可以省略()),但call則必須帶上().
示例
exec
調用存儲過程
有參數:exec mypro(12,'fsdf');
沒有參數:exec mypro;,也可以寫成exec mypro();
調用函數
有參數:var counts number;exec :counts:=myfunc('fsde');
沒有參數:var counts number;exec :counts:=myfunc;,也可以寫成var counts number;exec :counts:=myfunc();
call
調用存儲過程
有參數:call mypro(23,'fth');
無參數:call mypro();
調用函數
有參數:var counts number;call myfunc('asd') into :counts;
無參數:var counts number;call myfunc() into :counts;
其他注意事項
oracle 中字符串應該是 ” 而不應該是 “”
每寫完一條sql語句應加上 ;
為了防止call 和 exec 無參數的存儲過程或函數的錯誤,建議全部加上()
---------------------

