我有一个数据库,每天都会创建一个表来记录流程实例。
这些表标记为 MESSAGE_LOG_YYYYMMDD
目前我想对所有这些表顺序执行相同的查询。
我编写了下面的 PL/SQL,但卡在第 10 行。如何针对此处的所有表成功执行 SQL 语句?
DECLARE
CURSOR all_tables IS
SELECT table_name
FROM all_tables
WHERE TABLE_NAME like 'MESSAGE_LOG_2%'
ORDER BY TABLE_NAME ;
BEGIN
FOR msglog IN all_tables LOOP
SELECT count(*) FROM TABLE msglog.TABLE_NAME ;
END LOOP;
END;
/
最好将表重新架构为一张表,其中包含流程日志的当天关键列,而不是单独的表。
话虽如此,您可以使用动态 SQL:
DECLARE
CURSOR all_tables IS
SELECT table_name
FROM all_tables
WHERE TABLE_NAME like 'MESSAGE_LOG_2%'
ORDER BY TABLE_NAME ;
row_count pls_integer;
BEGIN
FOR msglog IN all_tables LOOP
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || msglog.TABLE_NAME INTO row_count;
END LOOP;
END;
/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)