我需要编写一个PL/SQL脚本来收集大约30个表的计数,然后将这些计数插入到一个新表中(该表将有30行)。因此,新表格可能看起来像:
CS_ADM_CV 27
CS_CV_IBM 38
CS_CV_ORA 99
CS_YY_CIS 12
ETC-
我该怎么做?这就是我目前所拥有的,它并没有像我想的那样工作。
SELECT (
SELECT COUNT(*)
from STGADM.CI_ACCT
) AS 'STGADM.CI_ACCT',
/* More like this etc etc */
(
SELECT COUNT(*)
from STGADM.CI_TNDR_CTL
) as 'STGADM.CI_TNDR_CTL'
from DUAL
into STGADM-CCBMIG.CV_PLSQL_COUNT;
对于如何获取所有计数,然后将它们插入到一个新表中,我似乎有一个错误的想法(我省略了琐碎的CREATE
语句)。
有人告诉我使用PL/SQL VAR来实现这一点。不确定
完整代码-http://pastebin.com/48ExZWq0
我需要任何提示/帮助,谢谢
假设您不能使用dba_tables
中的num_rows
,这可能是从收集统计数据的时间点开始的近似计数,而不是当前计数,最简单的方法是
SELECT 'CS_ADM_CV' table_name,
COUNT(*) cnt
FROM STGADM.CS_ADM_CV
UNION ALL
SELECT 'CS_CV_IBM' table_name,
COUNT(*) cnt
FROM STGADM.CS_CV_IBM
UNION ALL
SELECT 'CS_CV_ORA' table_name,
COUNT(*) cnt
FROM STGADM.CS_CV_ORA
...
也可以编写一个查询,返回特定模式中每个表的行数,但这会涉及到一些非常复杂的XML查询主题。除非您需要在添加新表时获得不同行集的灵活性,否则列出30个表可能是更容易的解决方案。