使用循环的动态SQL查询

使用循环的动态SQL查询,sql,oracle,dynamic,count,Sql,Oracle,Dynamic,Count,我有4张表tab_1、tab_2、tab_3和tab_4 如何使用一个动态查询获得所有4个表的计数 expected result: count of tab_1 = count of tab_2 = count of tab_3 = count of tab_4 = 提前感谢听起来您想运行四个独立的查询,而不是一个查询。听起来你是在描述 DECLARE TYPE tbl_list IS TABLE OF VARCHAR2(30); l_tables tbl_list := tb

我有4张表tab_1、tab_2、tab_3和tab_4 如何使用一个动态查询获得所有4个表的计数

expected result:

count of tab_1 = 
count of tab_2 =
count of tab_3 = 
count of tab_4 =

提前感谢

听起来您想运行四个独立的查询,而不是一个查询。听起来你是在描述

DECLARE
  TYPE tbl_list IS TABLE OF VARCHAR2(30);
  l_tables tbl_list := tbl_list( 'table_1', 'table_2', 'table_3', 'table_4' );

  l_cnt pls_integer;
BEGIN
  FOR i IN 1 .. l_tables.count
  LOOP
    EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || l_tables(i)
       INTO l_cnt;
    dbms_output.put_line( 'Count of ' ||  l_tables(i) || ' = ' || l_cnt );
  END LOOP;
END;
请尝试:

SET SERVEROUTPUT ON
DECLARE
  result1 NUMBER; result2 NUMBER; result3 NUMBER; result4 NUMBER;
BEGIN
    select count(*) into result1 from tab_1;
    select count(*) into result2 from tab_2;
    select count(*) into result3 from tab_3;
    select count(*) into result4 from tab_4;

    DBMS_OUTPUT.PUT_LINE('count of tab_1=' || result1);
    DBMS_OUTPUT.PUT_LINE('count of tab_2=' || result2);
    DBMS_OUTPUT.PUT_LINE('count of tab_3=' || result3);
    DBMS_OUTPUT.PUT_LINE('count of tab_4=' || result4);

END;

虽然我不明白你为什么想要这个,但你问,我们回答

要将这一切压缩到一个查询中,您可以尝试在dual的一个主查询中使用3个标量子查询

从选项卡1中选择Count作为CountOfTab1, 从选项卡2中选择Count作为选项卡的CountOfTab2, 从选项卡3中选择Count作为选项卡3的CountOfTab3, 从选项卡4中选择Count作为选项卡4的CountOfTab4 进入第1个国家, 第二个国家, 第三个国家, countOfTab4
从Dual

中,您的主题讨论了使用循环,这意味着一系列查询。问题的文本询问如何编写单个查询。哪一个是正确的?一个单一的查询将变得相当复杂。嗨,贾斯汀,非常感谢你的回复。查询是单个的,而数据应该在循环中替换。它说tbl_list.count需要declared@user3663500-对不起,我打错了。修正了,贾斯汀,我有一个叫阿瑟尔纳里奥的人。你能帮我一下吗?我是TechDo,这个很好用。但问题是我不想写4个slect查询和4个dbms_输出。select查询需要是静态的,表名应该是动态的