我正在尝试创建PL/SQL以从动态表名获取值的总和。我使用的是Oracle 11 c。表名基于另一个表中的行值。行将被添加或删除。以下是我所尝试的操作,但出现了表不存在的错误。
set serveroutput on;
declare
v_table varchar2(10);
v_appname varchar2(50);
v_appcnt number;
v_cnts_appname varchar2(50);
-- get app names
cursor appid_cur is
select 'ae_dt'||APPID, APPNAME from AE_APPS;
begin
open appid_cur;
loop
fetch appid_cur into v_table, v_appname;
FOR Cur_Rec IN (SELECT sum(NUMOBJECTS) cnt FROM v_table) LOOP
dbms_output.put_line(v_appname||', '||Cur_Rec.cnt);
END LOOP;
close appid_cur;
END LOOP;
END;
2条答案
按热度按时间zf9nrax11#
为此,您需要动态SQL(因为您必须将表名包含在将要执行的语句中),沿着内部
BEGIN-EXCEPTION-END
块,该块将处理错误并让循环继续到另一轮,而不会引发错误。包含表名的示例表:
请注意,如果您想获取这些表中的行数,您可以查询
user_tables
。如果您定期收集统计信息,num_rows
将检索在收集统计信息时有效的值:但是,如果您想 * 现在 * 就执行,则必须在PL/SQL过程中计算该数字:
最后一行(在输出中)表示不存在的表,这个事实在
exception
节中处理。你发布的代码获取
sum(numobjects)
,但是--我不知道它代表什么。不管怎样,现在你知道了 * 如何 * 处理这个问题,调整你自己的代码,使它编译并返回所需的结果。h7appiyu2#
我需要使用立即执行。
结束;