尝试在查询中执行查询

时间:2014-07-23 13:25:24

标签: sql oracle

我有一个查询,显示我需要执行的另一个查询:

所以第一部分只是将文本作为文本写出我要执行的查询的第一部分

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"

2 个答案:

答案 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