简体   繁体   English

是否可以通过oracle中的select查询将表名传递给SQL查询

[英]Is it possible to pass a table name to a SQL query by select query in oracle

Is it possible to pass a table name to a query using a result of another query?是否可以使用另一个查询的结果将表名传递给查询?

SELECT T.MID, T.TID, M.NAME 
FROM 'ONLINETRANSACTION@(' || SELECT ONLINEDBLINK FROM PARAMETERTABLE ||')' T
LEFT JOIN 'ONLINEMERCHANT@(' || SELECT ONLINEDBLINK FROM PARAMETERTABLE ||')' M 
ON T.MID = M.MID

I have tried with the above code but it doesn't work.我已经尝试过上面的代码,但它不起作用。

This is a simple example based on Scott's schema.这是一个基于 Scott 模式的简单示例。

  • lines 5 - 7 select your "table name" (actually, it appears that it is a database link name in your code. Doesn't matter, the principle is just the same)第 5 - 7 行选择你的“表名”(实际上,它在你的代码中看起来是一个数据库链接名。没关系,原理是一样的)
  • line 9 uses that "table name" and concatenates it with the rest of the SELECT statement;第 9 行使用该“表名”并将其与SELECT语句的其余部分连接起来; finally, it executes it using EXECUTE IMMEDIATE最后,它使用EXECUTE IMMEDIATE执行它

SQL> create table param (table_name varchar2(30));

Table created.

SQL> insert into param values ('EMP');

1 row created.

SQL> set serveroutput on
SQL> declare
  2    l_table_name param.table_name%type;
  3    l_max_sal    emp.sal%type;
  4  begin
  5    select table_name into l_table_name
  6      from param
  7     where rownum = 1;
  8
  9    execute immediate 'select max(sal) from ' || l_table_name into l_max_sal;
 10    dbms_output.put_line('Max salary = ' || l_max_sal);
 11  end;
 12  /
Max salary = 10000

PL/SQL procedure successfully completed.

SQL>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM