Как выполнить несколько запросов оракула, используя одно соединение? - PullRequest
0 голосов
/ 07 марта 2019

В моей базе данных есть 3 таблицы, и их схема выглядит примерно так:

Table1 (Col1 Pk, Col2), 
Table2 (Col3 Pk, Col1 FK, Col4)
Table3 (Col5 Pk, Col3 FK, Col6)

Здесь значения столбцов первичного ключа автоматически увеличиваются при каждой операции вставки. Я хочу вставить значения в приведенные выше таблицы. С вышеупомянутым сценарием я не могу вставить в Table3, если у меня нет значения Col3 (внешний ключ для Table2), аналогично вставка в Table2 не будет проходить, если у меня нет значения для Col1 (внешний ключ для Table1)

Вопрос: Как я могу вставить в вышеупомянутые таблицы в одном соединении с базой данных?

Я всегда могу сделать 3 разных вызова и вставить значения, но как я могу использовать значение из Таблицы1 и использовать его для вставки в Таблицу2, аналогично значению для Таблицы2 и использовать его для вставки в Таблицу3 в одном соединении?

Я думал о написании хранимой процедуры, но не уверен, как мне получить значение Col1 и использовать его для вставки в таблицу 2.

Просьба предложить некоторые мысли здесь. Пример также поможет.

Спасибо.

1 Ответ

2 голосов
/ 07 марта 2019

Я думаю, вы ищете это. Просто используйте Returning для получения значения PK и используйте значение при следующей вставке

declare
    v_col1_id number(10) := null;
    v_col3_id number(10) := null;
begin
    insert into T1 (col2) values ('xxx') RETURNING col1 INTO v_col1_id; -- col1 - PK
    insert into T2 (col1, col4) values (v_col1_id, 'yyy') RETURNING col3 INTO v_col3_id; -- col3 - PK
    insert into T3 (col3, col6) values (v_col3_id , 'zzz'); -- col5 - PK
end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...