存储过程以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
变量名和字段名一致,被当做字段名处理了。因此这个条件恒成立
把变量名换一下