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游标

解决方案 »

  1.   

    目测有点乱啊 ~ 
    fieldname 既是字段又是变量? 最好不要一样,否则影响结果;
    Execute Immediate plsql 哪个位置遍历?
      

  2.   

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

  3.   

    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?
      

  4.   

    fieldname是参数,上一个存储过程传的字段名, b_name是查询的条件。
    组后发现
     fieldname 会变成一个字符串 
    例:select * from RENT_BUILD where  'shangquancode'='CBD商业圈';
    最后还是从了。用动态游标解决了问题。