Я не совсем уверен, что понимаю, что вы пытаетесь выполнить.
- Если вы создаете блок PL / SQL, который вставляет строку, это действительно должна быть процедура, а не функция.Функция должна выполнять вычисления и возвращать результат.Процедура должна делать DML.
- Я не уверен, что вы подразумеваете под "разрешением пользователю записывать вводимые данные".В PL / SQL нет средств, чтобы запрашивать ввод у пользователя - он может принимать только входные параметры.
- Я не уверен, что понимаю, как логически может быть вставка в родительскую таблицу (
T2
)вставьте строку в дочернюю таблицу (T1
).Это подразумевает, что T1
на самом деле не является дочерней таблицей, что подразумевает, что у вас есть какая-то проблема с моделью данных.
Если ваша цель - передать недавно вставленные COL1
и COL2
таблиц из строки, которая была только что вставлена в T2
для процедуры PROC1
, я предполагаю, что вам нужно что-то вроде
CREATE OR REPLACE TRIGGER trig_t2
AFTER INSERT ON t2
FOR EACH ROW
BEGIN
proc1( :new.col1, :new.col2 );
END;
Звучит, как будто вы не хотите использоватьтриггер на всех.Если вы хотите создать заказ, у вас обычно есть процедура, которая выполняет несколько операторов INSERT
, а не пытается вставить в дочернюю таблицу триггер на родительском элементе.Например, что-то вроде этого будет гораздо понятнее и проще в обслуживании, чем решение на основе триггера.
CREATE OR REPLACE PROCEDURE create_order( p_order_description IN VARCHAR2 )
AS
BEGIN
INSERT INTO order( order_id, description )
VALUES( order_id_seq.nextval, p_order_description );
INSERT INTO order_ship_status( order_ship_status_id, order_id, status )
VALUES( order_ship_status_id.nextval, order_id_seq.currval, 'Not Shipped' );
END: