如何连接以形成Oracle中上一个查询的表名[重复]

dnph8jn4  于 2023-04-05  发布在  Oracle
关注(0)|答案(1)|浏览(128)

此问题在此处已有答案

how to use a variable in oracle script for the table name(5个答案)
What is the string concatenation operator in Oracle?(6个答案)
昨天关门了。
从下面的脚本中,我得到了project_name,它需要在我的下一个查询中形成表名的一部分,如何在oracle中做到这一点
查询1:

SELECT PROJECT FROM testServer_l WHERE liveConnection LIKE '%test01.azure.cloud%'

以上查询的输出为:91869 90237 87732 103868 96995 102646 98178 100587 99887 90277 68240 103630 92756 83169 90070 96194
查询2:

SELECT COUNT(*) FROM T91869.TotalConnection

表名为'T' + 'ProjectName' [来自上述查询],例如T+91869

gg0vcinb

gg0vcinb1#

如您所说,您可以 * 将 * T连接到project。使用

  • concat函数,例如select concat('T', project)
  • 缺点:concat只接受两个参数,所以-如果你必须连接两个以上的参数,你必须嵌套函数调用
  • 双管道||串联运算符(就像我做的那样)
  • 好处:连接尽可能多的字符串

但是,这还不够,您需要动态SQL
下面是一个例子:
示例 * 项目 * 表:

SQL> create table t91869 as select * from emp;

Table created.

SQL> create table t90237 as select * from dept;

Table created.

项目清单:

SQL> create table testserver_l as
  2    select 91869 project from dual union all
  3    select 90237         from dual;

Table created.

程序:

SQL> set serveroutput on
SQL> declare
  2    l_cnt number;
  3  begin
  4    for cur_r in (select 'T' || project as project
  5                  from testserver_l
  6                 )
  7    loop
  8      execute immediate 'select count(*) from ' || cur_r.project into l_cnt;
  9      dbms_output.put_line(cur_r.project ||': '|| l_cnt);
 10    end loop;
 11  end;
 12  /
T91869: 14
T90237: 4

PL/SQL procedure successfully completed.

SQL>

相关问题