Используйте выражение в таблице как оператор выбора без результата - PullRequest
1 голос
/ 11 декабря 2019

Относительно этого вопроса Я использую следующий код для выполнения запросов выбора, сохраненных в таблице.

begin
  for rec in (select col1,col2,col3 from Table_1) loop
    execute immediate 'insert into Table_3 SELECT DISTINCT ''' || rec.col1 ||''', CODE, '''|| rec.col2 ||''' FROM Table_2 WHERE col1 = ''' || rec.col1 || ''' AND  ' || rec.col2;
    commit;
  end loop;
end;

Возможно, что выбранный отдельный оператор не возвращает noзначения из таблицы_2. В текущем коде никакие строки не будут вставлены в Таблицу_3, если из Таблицы_2 не возвращены значения.

Моя цель состоит в том, чтобы в случае, если из Таблицы_2 не было возвращено ни одной строки, нулевые значения вставляются в Таблицу_3. Как в следующем примере, потому что rec.col1 содержит значение.

+----------+-------+-------+
| 3col1    | 3col2 | 3col3 |
+----------+-------+-------+
| rec.col1 | Null  | Null  |
+----------+-------+-------+

Как я могу это сделать?

1 Ответ

1 голос
/ 11 декабря 2019

Вы можете использовать функцию:

insert into Table_3
    with t as (
          SELECT DISTINCT . . .
          FROM Table_2
          WHERE col1 . . .
         )
    select t.*
    from t
    union all
    select ?, NULL, NULL, . . .
    from dual
    where not exists (select 1 from t);

Вам необходимо заполнить . . . вашими значениями. Возможно, вы захотите научиться использовать параметры с execute immediate.

...