我有一个简单的存储过程...
create or replace
PROCEDURE GET_PERSON (aName VARCHAR2, p_data OUT sys_refcursor)
IS
BEGIN
OPEN p_data FOR SELECT * FROM people_table WHERE firstname = aName;
END;
但是当我执行存储过程时,它会返回所有记录。
DECLARE
v_cur SYS_REFCURSOR;
v_1 number;
v_2 VARCHAR2(50);
v_3 VARCHAR2(200);
v_4 VARCHAR2(50);
v_5 VARCHAR2(50);
v_6 VARCHAR2(50);
BEGIN
GET_PERSON ('aaa@bbb.com', v_cur);
LOOP
FETCH v_cur INTO v_1, v_2, v_3, v_4, v_5, v_6;
EXIT WHEN v_cur%NOTFOUND;
dbms_output.put_line(v_2 || ' ' || v_3);
END LOOP;
CLOSE v_cur;
END;
如果我运行简单陈述
SELECT * FROM people_table WHERE firstname = 'aaa@bbb.com';
它正确返回一条记录。
为什么存储过程的行为不一样?
答案 0 :(得分:2)
我发现了这个问题..
我的问题是姓名冲突。当我改变上面的代码时,我注意到了这个问题。我原来有WHERE fistname = firstName。一旦我将参数更改为p_firstName就好了。