Oracle: динамический оператор SQL на основе таблицы сопоставления - PullRequest
0 голосов
/ 08 февраля 2019

Примите следующие операторы для создания контекста на этой странице :

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'), я хочу сделать SELECT непосредственно в TABLEB.

Что-то вроде:

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

Это можно сделать в операторе SQL, или я вынужден использовать контекст PL / SQL (с процедурами и т. Д.)?

1 Ответ

0 голосов
/ 08 февраля 2019

Попробуйте,

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...