当前位置: 代码迷 >> Oracle开发 >> oracle中存储过程中for in传递参数有关问题
  详细解决方案

oracle中存储过程中for in传递参数有关问题

热度:150   发布时间:2016-04-24 06:29:05.0
oracle中存储过程中for in传递参数问题
存储过程以oracle中scott/tiger 的表编写,方便展现问题:

存储过程如下(以oracle中scott/tiger编写):



create or replace package body test_p as

  --查询30部门的人
  procedure p_dept is
  begin
    declare
      v_emp emp%rowtype;
    Begin
      for v_emp in (select * from emp t where t.deptno = '30') loop
        test_p.p_emp(v_emp.empno);
      end loop;
    end;
  end p_dept;
  --通过编号查找人
  procedure p_emp(empno varchar2) is
  begin
    declare
      v_emp emp%rowtype;
      v_empno varchar2(20);
    Begin
      v_empno := empno;
      select t.*
        into v_emp
        from emp t
        --用变量v_empno接收参数empno,查出的结果正确,但是用传递过来的参数empno直接查询,就会出现循环的几次数据都相同
       where t.empno = empno
         and rownum = 1;
      dbms_output.put_line('-----传递过来的empno:'||empno);
      dbms_output.put_line('员工姓名:' || v_emp.ename);
    end;
  end p_emp;
end test_p;


create or replace package test_p as
  --查询30部门的人
  procedure p_dept;
  --通过编号查找人
  procedure p_emp(empno varchar2);
end test_p;

问题描述:
在p_dept中用for in 循环调用p_emp,每次传入empno,并通过empno查询员工信息,
需要在p_emp中每次将传入的参数赋值到本方法的变量v_empno中,查询的结果就正确,如果直接用参数empno查出的结果每次都一样;

如图:
用变量v_empno查出的结果正确


用传递过来的参数empno查询,每次数据都是SMITH


不明白这其中的原因?!



------解决思路----------------------
where?t.empno?=?empno
变量名和字段名一致,被当做字段名处理了。因此这个条件恒成立
把变量名换一下
  相关解决方案