日期:2014-05-16  浏览次数:20702 次

A'||i||' into '||sz_readdb(i)||' from o_inapp_v where 医院ID=''医院ID''' 返回为找回任何数据

declare
type sz_readdb_type is table of varchar2(200) index by binary_integer;
i number;
x number;
sqlstr varchar2(2000);
sz_readdb sz_readdb_type;
begin
--sz_readdb.extend;
delete tmp3;
select count(*) into x from o_inapp ;
for i in 10 .. x loop
sqlstr := 'select A'||i||' into '||sz_readdb(i)||' from o_inapp_v where 医院ID=''医院ID''';
--select A||i into sz_readdb(i) from o_inapp where 医院ID='医院ID';
execute immediate sqlstr;
insert into tmp3(医院ID) values(sz_readdb(i));

end loop;
commit;
sz_readdb.delete;
end;


返回 
ORA-01403: 未找到任何数据
ORA-06512: 在 line 13

折腾了我一天。。始终没搞好。。哪位帮我看看问题出在哪。。谢谢
以下是表结构

    大区 地区 代表 医院ID 医院名称 目标科室 医生ID 医生 医生级别 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25
1 大区 地区 代表 医院ID 医院名称 目标科室 目标医生代码 目标医生姓名 目标医生级别  9月1日 9月2日 9月3日 9月4日 9月5日 9月6日 9月7日 9月8日 9月9日 9月10日 9月11日 9月12日 9月13日 9月14日 9月15日 9月16日

------解决方案--------------------
第一:
你医院id查询可能没有数据返回所以报错。
第二:
 sqlstr := 'select A'
------解决方案--------------------
i
------解决方案--------------------
' into '
------解决方案--------------------
sz_readdb(i)
------解决方案--------------------
' from o_inapp_v where 医院ID=''医院ID''';
 execute immediate sqlstr;
这个sql 也是错误的写法。动态sql参数输出不是这么写的,而是:
 sqlstr := 'select A'
------解决方案--------------------
i
------解决方案--------------------
'  from o_inapp_v where 医院ID=''医院ID''';
 execute immediate sqlstr into sz_readdb(i);

ps:sz_readdb(i)为啥不直接用个varchar2代替?