SQL-запрос с динамическими столбцами и динамическими данными - PullRequest
0 голосов
/ 04 октября 2019

Мой запрос.

INSERT INTO TARGET_TABLE (SELECT DATA FROM TABLE_DATA WHERE TYPE = 'HEADER') VALUES
(SELECT DATA FROM TABLE_DATA WHERE TYPE = 'ITEMS')

В этом запросе я пытаюсь вставить данные в TARGET_TABLE. TABLE_DATA будет иметь данные в следующем формате

SELECT DATA FROM TABLE_DATA WHERE TYPE = 'HEADER'
Result COUNTRY,ID,NAME

SELECT DATA FROM TABLE_DATA WHERE TYPE = 'ITEMS'
Result 'IN','123','xyz' 

, поэтому я ожидаю, что ниже

INSERT INTO TARGET_TABLE (COUNTRY,ID,NAME) VALUES ('IN','123','xyz')

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Вам необходимо использовать динамический запрос, подобный следующему:

BEGIN
EXECUTE IMMEDIATE 
  'INSERT INTO TARGET_TABLE ( ' 
  || SELECT DATA FROM TABLE_DATA WHERE TYPE = 'HEADER' 
  || ') VALUES ('
  || SELECT DATA FROM TABLE_DATA WHERE TYPE = 'ITEMS' 
  || ')';
END;
/

Cheers !!

1 голос
/ 04 октября 2019

select case это то, что вам нужно

INSERT INTO TARGET_TABLE 
(SELECT case when type='HEADER' then COL1 else 'aa' END
     ,case when type='HEADER' then COL2 else 'bb' END
     ,case when type='HEADER' then COL3 else 'cc' END
     ,case when type='HEADER' then COL4 else 'dd' END
FROM TABLE_DATA )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...