日期:2014-05-17  浏览次数:20883 次

sql存储过程 IN函数 赋参数 问题
SQL code

方法1
select * from users  where dept_code in ('0000005','0000026')

create or replace procedure mypro(pkey in varchar2)
as
begin
dbms_output.put_line(pkey);
for c in( select * from mgs_users  where dept_code in (pkey)) loop 
update mgs_users set enabled='N' where USER_ID = c.USER_ID;
end loop;
end;

begin
mypro('''0000005'''||chr(44)||'''0000026''');
end;
==================================================================================================
方法2
select * from mgs_users  where dept_code in ('0000005','0000026')

create or replace procedure mypro(pkey in varchar2)
as
v_str varchar2(500);
begin
dbms_output.put_line(pkey);
v_str:='begin for c in( select * from mgs_users  where dept_code in ('||pkey||')) loop ';
v_str:=v_str||'update mgs_users set enabled=''Y'' where USER_ID = c.USER_ID; ' ;
v_str:=v_str||'end loop;end;' ;
execute immediate  v_str;
commit;
end;

begin
mypro('''0000005'',''0000026''');
end;


============================================================================================
查询出部门在0000005,0000006中的员工信息,然后改变员工状态为可用enabled=''Y''
第一种方法直接往存储过程中传参数,无法改变状态
第二种方法用动态语句可以达到目的

小弟新手,麻烦问一下不用动态语句要怎么做?

------解决方案--------------------
因为你必须把你的传入参数拼到串里,执行UPDATE,所以只能用动态。
------解决方案--------------------
探讨
因为你必须把你的传入参数拼到串里,执行UPDATE,所以只能用动态。