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

求助存储过程游标
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 不知道怎么遍历它求助各位大大!
存储 sql 游标

------解决方案--------------------
目测有点乱啊 ~ 
fieldname 既是字段又是变量? 最好不要一样,否则影响结果;
Execute Immediate plsql 哪个位置遍历?
------解决方案--------------------
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?