在Oracle中,存储过程是一种用于封装和重复使用SQL代码的对象
-
IN参数:这些参数用于将数据从调用程序传递到存储过程。在存储过程内部,IN参数的值是只读的,不能被修改。
-
OUT参数:这些参数用于将数据从存储过程返回给调用程序。OUT参数在存储过程内部可以被赋值,调用程序可以获取这些值。
-
IN OUT参数:这些参数既可以将数据从调用程序传递到存储过程,也可以将数据从存储过程返回给调用程序。IN OUT参数在存储过程内部可以被赋值,调用程序可以获取这些值。
以下是一个简单的Oracle存储过程示例,演示了如何使用IN、OUT和IN OUT参数:
CREATE OR REPLACE PROCEDURE my_procedure ( p_in IN NUMBER, p_out OUT NUMBER, p_in_out IN OUT NUMBER ) AS BEGIN -- 使用IN参数 DBMS_OUTPUT.PUT_LINE('p_in: ' || p_in); -- 为OUT参数赋值 p_out := p_in * 2; -- 修改IN OUT参数的值 p_in_out := p_in_out + 5; END; /
要调用此存储过程并传递参数,可以使用以下匿名PL/SQL块:
DECLARE v_in NUMBER := 10; v_out NUMBER; v_in_out NUMBER := 5; BEGIN my_procedure(v_in, v_out, v_in_out); -- 输出OUT参数的值 DBMS_OUTPUT.PUT_LINE('v_out: ' || v_out); -- 输出IN OUT参数的值 DBMS_OUTPUT.PUT_LINE('v_in_out: ' || v_in_out); END; /
运行此匿名PL/SQL块后,将看到以下输出:
p_in: 10 v_out: 20 v_in_out: 15
这说明了如何在Oracle存储过程中使用IN、OUT和IN OUT参数进行参数传递。