SQL | PL/SQL 中函数和存储过程的区别

原文:https://www . geesforgeks . org/SQL-函数和存储过程的区别-in-pl-sql/

先决条件:

存储过程(SP)和函数(用户定义函数(UDF))之间的区别:

  1. 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 .....

    ```

  2. 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 .....

    ```

  3. 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

    ```

  4. 我们不能在像 SELECT、INSERT、UPDATE、DELETE、MERGE 等 SQL 语句中使用 SP 。但是我们可以和 UDF 一起使用。

  5. 我们可以在 SP 中使用 try-catch 异常处理,但是我们不能在 UDF 中这样做。
  6. 我们可以在 SP 中使用交易,但在 UDF 中无法使用。