我有一个查询,显示我需要执行的另一个查询:
所以第一部分只是将文本作为文本写出我要执行的查询的第一部分
SELECT distinct 'SELECT COUNT(txn_id) FROM '
然后我添加了我想在
上执行查询的初始部分的所有表table_name from all_tab_columns WHERE OWNER='RGSWKF_PRGM' AND COLUMN_NAME like '%TXN_ID%';
所以我的完整查询是
SELECT distinct 'SELECT COUNT(txn_id) FROM ' || table_name from all_tab_columns WHERE OWNER='RGSWKF_PRGM' AND COLUMN_NAME like '%TXN_ID%';
这给了我一个我想要执行的查询列表,如下所示:
SELECT COUNT(txn_id) FROM MEETING_TXN_LIST
SELECT COUNT(txn_id) FROM TXN_COMMENT
SELECT COUNT(txn_id) FROM TXN_DEAL_FEE
....等。有人告诉我,一旦得到这个结果,我可以通过在原始查询中添加一些内容来自动执行由此创建的查询,但我还无法找到任何内容吗?
所以基本上我希望它从一个查询执行:
SELECT COUNT(txn_id) FROM MEETING_TXN_LIST
然后
SELECT COUNT(txn_id) FROM TXN_COMMENT
然后
SELECT COUNT(txn_id) FROM TXN_DEAL_FEE
等。在一个查询中。
union
使用带有单引号的union all给出了带有文本的结果
SELECT COUNT(txn_id) FROM TXN_COMMENT union all ..etc...
没有单引号会给我以下错误
ORA-00936: missing expression
00936. 00000 - "missing expression"
答案 0 :(得分:0)
我建议您使用union all
连接的子查询生成查询:
SELECT 'MEETING_TXN_LIST' as table_name, COUNT(txn_id) as cnt FROM MEETING_TXN_LIST UNION ALL
SELECT 'TXN_COMMENT', COUNT(txn_id) FROM TXN_COMMENT union all
SELECT 'TXN_DEAL_FEE' COUNT(txn_id) FROM TXN_DEAL_FEE;
对此的查询基本上是:
SELECT 'SELECT ''' || table_name || ''' as table_name, COUNT(txn_id) as cnt
FROM ' || table_name || ' union all '
from all_tab_columns
WHERE OWNER = 'RGSWKF_PRGM' AND COLUMN_NAME = 'TXN_ID';
请注意,您需要从最后一行删除最终union all
。并且,我将查询更改为仅查看列TXN_ID
,因为这是您在查询中使用的内容。
答案 1 :(得分:0)
select txt
|| case
when row_number() over (order by rn desc) = 1 then null
else ul
end
from (select 'SELECT '''
|| table_name
|| ''' as table_name, COUNT(txn_id) as cnt FROM '
|| table_name
as txt
,' union all ' ul
,rownum rn
from all_tab_columns
where OWNER = 'RGSWKF_PRGM' and COLUMN_NAME = 'TXN_ID')
order by rn