SQL | PL/SQL 中函数和存储过程的区别
原文:https://www . geesforgeks . org/SQL-函数和存储过程的区别-in-pl-sql/
先决条件:
存储过程(SP)和函数(用户定义函数(UDF))之间的区别:
-
SP 可以返回值也可以不返回值但是UDFT7】必须返回值。 示例:
```sql 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 可以有输入/输出参数,但是UDFT7】只有有输入参数。 示例:
```sql 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 .....
```
-
We can call UDF from SP but cannot call SP from a function.
示例:
```sql 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;
```
输出:
```sql calling function in procedure the answer is 36
```
-
我们不能在像 SELECT、INSERT、UPDATE、DELETE、MERGE 等 SQL 语句中使用 SP 。但是我们可以和 UDF 一起使用。
- 我们可以在 SP 中使用 try-catch 异常处理,但是我们不能在 UDF 中这样做。
- 我们可以在 SP 中使用交易,但在 UDF 中无法使用。
版权属于:月萌API www.moonapi.com,转载请注明出处