先决条件:
- PL/SQL 中的过程
- PL/SQL 中的函数。
存储过程(SP)和函数(用户定义函数(UDF))的区别:
- SP可能会也可能不会返回一个值,但UDF必须返回一个值。
例子:SP -> create or replace procedure GEEKS(x int) is y int; begin ..... UDF-> FUNCTION GEEKS(x int) /*return statement so we must return value in function */ RETURN int IS y int; BEGIN .....
- SP可以有输入/输出参数,而UDF只有输入参数。
例子:SP -> CREATE OR REPLACE PROCEDURE Factorial(x IN NUMBER, result OUT NUMBER) is begin .... UDF -> FUNCTION Factorial(x IN NUMBER) /* only input parameter */ return NUMBER is result NUMBER; begin .....
- 我们可以从SP调用UDF ,但不能从函数调用SP 。
例子:
Calling UDF cal() inside SP square() but reverse is not possible. set serveroutput on; declare a int; c int; function cal(temp int) return int as ans int; begin ans:=temp* temp; return ans; end; procedure square(x in int, ans out int) is begin dbms_output.put_line('calling function in procedure'); ans:= cal(x); end; begin a:=6; square(a, c); dbms_output.put_line('the answer is '|| c); end;
输出:
calling function in procedure the answer is 36
- 我们不能在 SELECT、INSERT、UPDATE、DELETE、MERGE 等 SQL 语句中使用SP ,但我们可以将它们与 UDF 一起使用。
- 我们可以在 SP 中使用 try-catch 异常处理,但我们不能在UDF 中这样做。
- 我们可以在SP 中使用事务,但在UDF 中是不可能的。