求助存储过程游标

黑色沙丘 2013-04-01 09:19:50
CREATE OR REPLACE 
PROCEDURE BUILDCOUNT (

b_defaultnum in NUMBER,
b_num in NUMBER,
b_id in VARCHAR2,
b_typeid in VARCHAR2,
b_super_typeid in VARCHAR2,
b_hierarchy in VARCHAR2,
b_name in VARCHAR2,--查询变量
b_tempnum in NUMBER,--父级值
qz_etail_id in VARCHAR2,--用户权重标示ID
fieldname in VARCHAR2--字段名
)
AS
--t_build VARCHAR2(20);
plsql VARCHAR2(200);
v_name VARCHAR2(20);
cursor t_build is
select * from RENT_BUILD where fieldname =''''||b_name||'''';

BEGIN
v_name:=b_name;
plsql:='select * from RENT_BUILD where '||fieldname||'='''||b_name||'''';
--Execute Immediate plsql;
dbms_output.put_line(plsql);
for res in t_build loop
dbms_output.put_line(res.buildid);
-- updateBuild(res.buildid,b_num,qz_etail_id,b_name,b_tempnum,b_defaultnum,fieldname);
end loop;
dbms_output.put_line(' 影响的行数: '||sql%rowcount||'字段名:'||fieldname);
commit;
END;



为什么我的游标没有数据,看了是b_name传入的事中文‘CBD商圈’需要单引号,但是还是没有数据,

Execute Immediate plsql 不知道怎么遍历它求助各位大大!
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinpingf 2013-04-02
  • 打赏
  • 举报
回复
plsql:='select * from RENT_BUILD where '||fieldname||'='''||b_name||''''; Execute Immediate plsql;--需要遍历 这个语法容易理解,动态查询条件拼装。如果不是两个参数有问题则应该正常执行。 cursor t_build is select * from RENT_BUILD where fieldname =''''||b_name||''''; 相比之下,这个语句就有问题了,你的字段名难道就叫 fieldname?
黑色沙丘 2013-04-02
  • 打赏
  • 举报
回复
我用动态游标解决了!
黑色沙丘 2013-04-02
  • 打赏
  • 举报
回复
[code=sql]

plsql:='select * from RENT_BUILD  where '||fieldname||'='''||b_name||'''';               
Execute Immediate plsql;--需要遍历


[/code]
yjytiantang 2013-04-02
  • 打赏
  • 举报
回复
目测有点乱啊 ~ fieldname 既是字段又是变量? 最好不要一样,否则影响结果; Execute Immediate plsql 哪个位置遍历?
黑色沙丘 2013-04-02
  • 打赏
  • 举报
回复
fieldname是参数,上一个存储过程传的字段名, b_name是查询的条件。 组后发现 fieldname 会变成一个字符串 例:select * from RENT_BUILD where 'shangquancode'='CBD商业圈'; 最后还是从了。用动态游标解决了问题。

17,086

社区成员

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

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