使用两个过程用 OUT 和 IN 参数进行简单计算,PL/SQL Oracle
Posted
技术标签:
【中文标题】使用两个过程用 OUT 和 IN 参数进行简单计算,PL/SQL Oracle【英文标题】:Using two procedures to make simple calculations with OUT and IN parameters, PL/SQL Oracle 【发布时间】:2016-03-06 15:38:51 【问题描述】:我们被指派用 Oracle 的 11g PL/SQL 语言创建两个用于进行简单计算的过程。 赋值如下:
创建两个过程,其中第一个 (
a
) 将接收两个带有 IN 参数的值,然后将值发送到过程b
,该过程将计算并显示结果。
我浏览了网络并阅读了有关此的书籍,但我无法让它发挥作用。我经常遇到错误代码,我无法弄清楚我做错了什么。我什至不确定这是否可行,但很难找到答案。
这是我的代码:
SET serveroutput ON
CREATE OR REPLACE PROCEDURE proc_a
(number1 IN NUMBER, number2 IN NUMBER)
AS
BEGIN
proc_b(number1, number2);
END;
/
CREATE OR REPLACE PROCEDURE proc_b
(number1_proc_a IN OUT NUMBER, number2_proc_a IN OUT NUMBER, result_proc_a OUT NUMBER)
AS
result_proc_a number;
BEGIN
result_proc_a := tal1_proc_a + tal2_proc_a;
dbms_output.put_line('Result: ' || result_proc_a);
END;
/
CALL proc_a(4, 6);
如果有人知道为什么它不起作用,我将不胜感激!我遇到的错误消息是:
PL/SQL: Statement ignored. Object proc_a is invalid.
还有:
Package or function %s is in an invalid state
编辑: 在用户 Sagi 的帮助下,我得到了它的工作!谢谢:)
【问题讨论】:
将输入变量声明为 IN OUT 可以吗?另外,看起来您在开始时将 result_proc_a 声明为 out,那么您为什么要再次定义它呢? 哦,天哪...你是对的。解决了我的问题,哈哈。我一定是被所有的代码弄瞎了!谢谢,它现在按预期工作! :) 【参考方案1】:需要注意的几点:
proc_b 中有一个重复的变量名 result_proc_a:它被声明为第三个参数和局部变量。 您应该删除局部变量声明。
最好以相反的顺序声明过程。 proc_a依赖于proc_b,所以先创建proc_b。这样 proc_a 在创建后就不会处于无效状态。
虽然参数可以是IN OUT
,但是proc_b的前两个参数不需要是OUT
。通过删除OUT
,您可以使用文字数字调用proc_b。
根据您使用的环境,执行普通的call
可能不起作用。在这种情况下,请使用 begin end
块,它始终有效:
BEGIN
proc_a(4, 6);
END;
/
我看到你的问题已经解决了。我只是留下这个答案以供参考。
【讨论】:
【参考方案2】:试试这个。希望下面的 sn-p 对您有所帮助。我在这里只建议一件事 如果计算量很大,请使用 pls_integer 代替 NUMBER 参与程序。
SET serveroutput ON
CREATE OR REPLACE PROCEDURE proc_a
(number1 IN OUT PLS_INTEGER,
number2 IN OUT PLS_INTEGER
)
AS
resl_proc_b PLS_INTEGER;
BEGIN
proc_b(number1, number2,resl_proc_b);
END;
/
CREATE OR REPLACE PROCEDURE proc_b(
number1_proc_a IN OUT PLS_INTEGER,
number2_proc_a IN OUT PLS_INTEGER,
result_proc_a OUT PLS_INTEGER)
AS
tal1_proc_a PLS_INTEGER:=0;
tal2_proc_a PLS_INTEGER:=0;
BEGIN
result_proc_a := tal1_proc_a + tal2_proc_a;
dbms_output.put_line('Result: ' || result_proc_a);
END;
/
【讨论】:
以上是关于使用两个过程用 OUT 和 IN 参数进行简单计算,PL/SQL Oracle的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义 ItemReader 调用带有 IN 和 OUT 参数的存储过程