Oracle 存储过程传参

shunzi403566 2012-07-27 06:09:24
sql 语句更新多条语句的时候 可以使用 in

比如 update 表名 set 字段=‘值’ where 字段 in() 括号中可以传入多个值


但是在存储过程中 如果我在程序代码中抓到一些值(数量不定)

存储过程sp_update(str in varchar2) 怎么才能把在代码中的值拼接成可以使用的值

存储过程中只有 update 表名 set 字段=‘值’ where 字段 in(str)

也就是怎么才能处理这个str
...全文
385 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shunzi403566 2012-07-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

SQL code

动态sql比较容易处理
create procedure sp_update
(
str in varchar2
)
as
pa_str varchar2(1000);
begin
pa_str:='update 表名 set 字段=''值'' where 字段 in(:str)';
execute immediate pa_str using str;
end;……
[/Quote]

我想最终的语句是这样的
UPDATE WORKED SET STATUS='N' WHERE  FORM_NO IN ('100','101')


如果你这种写法 这个str 应该传成什么样的
luckings 2012-07-27
  • 打赏
  • 举报
回复

动态sql比较容易处理
create procedure sp_update
(
str in varchar2
)
as
pa_str varchar2(1000);
begin
pa_str:='update 表名 set 字段=''值'' where 字段 in(:str)';
execute immediate pa_str using str;
end;
str这个参数的值在调用存储的时候拼接好就可以
小德 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

SQL code
-- 参数下面的函数:i_user_ids 参数的赋值方式!

create or replace FUNCTION fun_getemails(i_user_ids VARCHAR2, i_cdate VARCHAR2 DEFAULT TO_CHAR(SYSDATE,'D'))
/***********************************************……
[/Quote]
老罗威武..
楼主,l_user_ids := ''''||replace(i_user_ids,',',''',''')||'''';这样就是处理你的STR呢
shunzi403566 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

SQL code
-- 参数下面的函数:i_user_ids 参数的赋值方式!

create or replace FUNCTION fun_getemails(i_user_ids VARCHAR2, i_cdate VARCHAR2 DEFAULT TO_CHAR(SYSDATE,'D'))
/***********************************************……
[/Quote]
怎么处理这个 传入的str呢 怎么拆分成我需要的参数 并进行循环呢
luoyoumou 2012-07-27
  • 打赏
  • 举报
回复
-- 参数下面的函数:i_user_ids 参数的赋值方式!

create or replace FUNCTION fun_getemails(i_user_ids VARCHAR2, i_cdate VARCHAR2 DEFAULT TO_CHAR(SYSDATE,'D'))
/***************************************************
** 功能:根据输入的用户ID(S)及日期得到相应的用户邮箱(查询user_info表)
** 备注:工作日与非工作日区分对待:如果是工作日(周一到周五),则得到相关用户ID的workday_email字段内容;
** 如果是非工作日(周六、日)则得到相关用户ID的weekend_email字段的内容
** 参数输入格式:'01636,00220' (表示获取用户ID为01636和00220的邮箱)
** 创建者:luoyoumou
** 创建时间:2012.05.22
****************************************************/
RETURN varchar2 RESULT_CACHE
IS
l_sql VARCHAR2(1000);
l_emails VARCHAR2(200);
l_user_ids VARCHAR2(200);
BEGIN
l_user_ids := ''''||replace(i_user_ids,',',''',''')||'''';
l_sql := 'SELECT LISTAGG(DECODE(:i_cdate,''1'',weekend_email,''7'',weekend_email,workday_email),'';'') WITHIN GROUP(ORDER BY userid) as emails FROM user_info ';
l_sql := l_sql || 'WHERE u_status=1 ' || 'AND (userid in('||l_user_ids||')' || ' OR parent_userid in('||l_user_ids||'))';

EXECUTE IMMEDIATE l_sql INTO l_emails USING i_cdate;
RETURN l_emails;
EXCEPTION WHEN OTHERS
THEN
RETURN NULL;
END;
/
shunzi403566 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

用动态SQL语句撒
[/Quote]



怎么用 教教我撒
luoyoumou 2012-07-27
  • 打赏
  • 举报
回复
用动态SQL语句撒

17,090

社区成员

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

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