Sql Oracle存储过程inout参数问题-获得解决方案-键入错误
我已成功创建以下存储过程:Sql Oracle存储过程inout参数问题-获得解决方案-键入错误,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我已成功创建以下存储过程: CREATE OR REPLACE PROCEDURE FIRSTPROC (ID1 IN VARHAR2, ID2 IN NUMBER ) AS CURSOR FIRST_CUR AS SELECT id2val FROM WHERE id1val = ID1; BEGIN DBMS_OUTPUT.PUT_LINE(ID1); OPEN FIRST_CUR; FETCH FIRST_CUR INTO ID2; IF FIRST_CUR%N
CREATE OR REPLACE PROCEDURE FIRSTPROC (ID1 IN VARHAR2, ID2 IN NUMBER )
AS
CURSOR FIRST_CUR AS
SELECT id2val
FROM
WHERE id1val = ID1;
BEGIN
DBMS_OUTPUT.PUT_LINE(ID1);
OPEN FIRST_CUR;
FETCH FIRST_CUR INTO ID2;
IF FIRST_CUR%NOTFOUND THEN
ID2 := 0;
END IF;
END
执行时,我在ID1变量中将值传递为23,该值显示在DBMS_OUTPUT.PUT_LINE语句中。这个值在表中,但我没有得到结果
但是,如果我在存储过程中硬编码23,我就得到了值。我弄糊涂了。上面我遗漏了一些东西
CREATE OR REPLACE PROCEDURE FIRSTPROC (ID1 IN VARHAR2, ID2 IN NUMBER )
AS
CURSOR FIRST_CUR AS
SELECT id2val
FROM
WHERE id1val = 23;
BEGIN
DBMS_OUTPUT.PUT_LINE(ID1);
OPEN FIRST_CUR;
FETCH FIRST_CUR INTO ID2;
IF FIRST_CUR%NOTFOUND THEN
ID2 := 0;
END IF;
END
首先,您已将ID2声明为IN参数,因此不会返回结果。您需要将ID2声明为IN OUT或OUT参数。(顺便说一句,您提供的代码甚至不会编译,因为“VARHAR2”是一个输入错误)。第二个过程也是这样,所以我不明白这是怎么可能的,所以你肯定还有别的事情要做 一些问题:
VARHAR2
我们输入了一个拼写错误,应该是VARCHAR2
。
- 您可以使用
指定引用相应表列的数据类型table\u name.column\u name%TYPE
IN
参数之一更改为OUT
(或IN-OUT
参数)选择。。。进入…
而不是光标
CREATE OR REPLACE PROCEDURE FIRSTPROC (
ID1 IN table_name.id1val%TYPE,
ID2 OUT table_name.id2val%TYPE
)
AS
BEGIN
DBMS_OUTPUT.PUT_LINE(ID1);
SELECT id2val
INTO ID2
FROM table_name
WHERE id1val = ID1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
ID2 := 0; -- Or you could use NULL
WHEN TOO_MANY_ROWS THEN
ID2 := 0; -- Or you could use NULL
END;
/
表中是否有列
ID1
?只是为了确定一下。另一方面,你的程序很好。