产生这个错误的原因:
returning into子句作用于insert,update,delete,上而select则不行,应该用into。
报错的存储如下:
create or replace procedure p_stu_info(s_id number, s_name varchar2) is
v_name varchar2(10);
v_age number;
v_ErrMsg varchar2(200);
begin
execute immediate 'select name,age from student_test where id=:1 and name=:2'
using s_id, s_name
returning into v_name, v_age;
dbms_output.put_line(v_name || '的年龄为:' || to_char(v_age));
exception
when others then
v_ErrMsg := SUBSTRB(SQLERRM, 1, 200);
dbms_output.put_line('找不到相应学生');
end p_stu_info;
改成下面这样就ok了:
create or replace procedure p_stu_info(s_id number, s_name varchar2) is
v_name varchar2(10);
v_age number;
v_ErrMsg varchar2(200);
begin
execute immediate 'select name,age from student_test where id=:1 and name=:2'
into v_name, v_age
using s_id, s_name;
dbms_output.put_line(v_name || '的年龄为:' || to_char(v_age));
exception
when others then
v_ErrMsg := SUBSTRB(SQLERRM, 1, 200);
dbms_output.put_line('找不到相应学生,错误原因:'||v_ErrMsg);
end p_stu_info;
本文介绍了一个常见的Oracle存储过程中使用RETURNING INTO的错误,并提供了正确的使用方法。错误示例展示了如何从SELECT语句中获取数据到变量,但使用了不正确的RETURNING INTO语法。正确的做法是使用INTO子句直接接收查询结果。
1532

被折叠的 条评论
为什么被折叠?



