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

📅  最后修改于: 2021-09-08 15:42:38             🧑  作者: Mango

先决条件:

  • PL/SQL 中的过程
  • PL/SQL 中的函数。

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

  1. 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 
    .....
    
    
  2. 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
    .....
    
    
  3. 我们可以从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
    
  4. 我们不能在 SELECT、INSERT、UPDATE、DELETE、MERGE 等 SQL 语句中使用SP ,但我们可以将它们与 UDF 一起使用。
  5. 我们可以在 SP 中使用 try-catch 异常处理,但我们不能UDF 中这样做。
  6. 我们可以在SP 中使用事务,但在UDF 中是不可能的。