PL/SQL–Procedure(过程)和Function(函数)的区别
过程 | 函数 |
---|---|
使用关键字 procedure 声明 | 使用关键字 function 进行声明 |
都可以使用 IN/OUT/IN-OUT 格式的参数 | 都可以使用 IN/OUT/IN-OUT 格式的参数 |
在定义的时候,不需要进行 return( 返回值 ) | 需要指定使用 return 定返回值的类型 |
都可以由声明、执行、异常处理三个部分组成 | 都可以由声明、执行、异常处理三个部分组成 |
可以作为独立的 PL/SQL 语句单独执行 | 在 PL/SQL 中必须指定变量接收返回,必须在表达式中使用 |
可以在内部包含 RETURN 子句,类似 JAVA 中的使用 | 必须包含一个有效的 RETURN 子句 |
在 COMMAND 命令窗口中,使用 EXECUTE 命令执行过程 | 借用 select 语句来执行 |
在 DDL 和 SELECT 语句中不可以调用过程 | 在 DDL 和 SELECT 语句中可以调用函数 |
都可以使用 CALL 参数来调用相应的函数或过程 :V_SQL_F := ‘CALL TEST_FUNC_P(:p_1) INTO :V_RESULT’;V_SQL_P := ‘CALL TEST_CALL_P(:p_1)’;EXECUTE IMMEDIATE V_SQL_F USING IN V_I_P1, OUT V_RESULT;EXECUTE IMMEDIATE V_SQL_P USING IN V_I_P1; | 都可以使用 CALL 参数来调用相应的函数或过程 :V_SQL_F := ‘CALL TEST_FUNC_P(:p_1) INTO :V_RESULT’;V_SQL_P := ‘CALL TEST_CALL_P(:p_1)’;EXECUTE IMMEDIATE V_SQL_F USING IN V_I_P1, OUT V_RESULT;EXECUTE IMMEDIATE V_SQL_P USING IN V_I_P1; |
都可以使用默认值,都可以使用位置表示法和名称表示法 | 都可以使用默认值,都可以使用位置表示法和名称表示法 |
当需要返回多个值的时候,推荐使用过程 | 当需要返回一个值的时候,推荐使用函数 |