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

多来哈米 2015-03-11 11:11:35
存储过程以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


不明白这其中的原因?!


...全文
595 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2015-03-11
  • 打赏
  • 举报
回复
where t.empno = empno 变量名和字段名一致,被当做字段名处理了。因此这个条件恒成立 把变量名换一下
多来哈米 2015-03-11
  • 打赏
  • 举报
回复
还望高手指点
多来哈米 2015-03-11
  • 打赏
  • 举报
回复
果真的这个原因,谢谢

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧