甲骨文:动态SQL语句基于映射表

问题描述 投票:0回答:1

看看下面的语句,以创建本page上下文:

BEGIN TRANSACTION;
    CREATE TABLE TABLEA (COLUMN_A VARCHAR2(30));
    CREATE TABLE TABLEB (COLUMN_B VARCHAR2(30));
    CREATE TABLE MAPPING_TABLE (TABLEA_COL VARCHAR2(30), TABLEB_COL VARCHAR2(30));
    INSERT INTO MAPPING_TABLE (TABLEA_COL, TABLEB_COL) VALUES ('COLUMN_A', 'COLUMN_B');
COMMIT;

我想要使​​用的TABLEB设置好的映射值MAPPING_TABLE一个选择。

换句话说,知道TABLEA(例如“COLUMN_A”)的列的名称,我想直接使一个SELECTTABLEB

就像是:

SELECT /*a statement to recover the COLUMN_B based on the 'COLUMN_A' value*/ 
FROM TABLEB

有可能在SQL语句做,或者我被迫使用PL / SQL上下文(与程序,等...)?

sql oracle dynamic-sql
1个回答
0
投票

尝试这个,

declare
  v_col varchar(30);
  v_val varchar(30);
  sql_stmt varchar(255);
begin
  select tableb_col into v_col
  from mapping_table 
  where tablea_col = 'COLUMN_A';

  sql_stmt := 'select '||v_col||' from tableb';

  dbms_output.put_line ( sql_stmt ) ;

  execute immediate sql_stmt into l_val;

  dbms_output.put_line ( v_val) ;
end;
© www.soinside.com 2019 - 2024. All rights reserved.