试图了解pl sql存储过程如何工作以及为什么我的结果不同

时间:2016-01-28 12:29:03

标签: oracle plsql oracle11g

我有一个简单的存储过程...

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';

它正确返回一条记录。

为什么存储过程的行为不一样?

1 个答案:

答案 0 :(得分:2)

我发现了这个问题..

我的问题是姓名冲突。当我改变上面的代码时,我注意到了这个问题。我原来有WHERE fistname = firstName。一旦我将参数更改为p_firstName就好了。