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游标
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 哪个位置遍历?
Execute Immediate plsql;--需要遍历
[/code]
Execute Immediate plsql;--需要遍历这个语法容易理解,动态查询条件拼装。如果不是两个参数有问题则应该正常执行。
cursor t_build is
select * from RENT_BUILD where fieldname =''''||b_name||'''';
相比之下,这个语句就有问题了,你的字段名难道就叫 fieldname?
组后发现
fieldname 会变成一个字符串
例:select * from RENT_BUILD where 'shangquancode'='CBD商业圈';
最后还是从了。用动态游标解决了问题。