尝试:
CREATE PROCEDURE ADD_ITEM_TEXT(pin_Text IN VARCHAR2) IS
nItem_id ITEM.ID%TYPE;
BEGIN
FOR aRow IN (SELECT ID FROM USER)
LOOP
INSERT INTO ITEM(ID, FK_USER_ID)
VALUES (ITEM_ID_SEQ.NEXTVAL, aRow.ID)
RETURNING ID INTO nItem_id;
INSERT INTO ITEM_HISTORY(ID, TEXT, FK_ITEM_ID)
VALUES (ITEM_HISTORY_ID_SEQ.NEXTVAL, pin_Text, nItem_id);
END LOOP;
COMMIT;
DBMS_OUTPUT.PUT_LINE('All changes committed');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception: ' || SQLCODE || ':' || SQLERRM);
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('All changes ROLLED BACK');
END ADD_USER_ITEM;
由于您没有告诉我们用于 ITEM.ID 和 ITEM_HISTORY.ID 列的序列名称,因此我编造了序列名称 - 替换我的“编造”名称(ITEM 表的 ITEM_ID_SEQ,ITEM_HISTORY 表的 ITEM_HISTORY_ID_SEQ ) 具有正确的序列名称。
以上创建了一个过程。要使用它,您需要按如下方式调用它:
BEGIN
ADD_ITEM_TEXT('Text for an item');
ADD_ITEM_TEXT('Text for another item');
ADD_ITEM_TEXT('Text for the last item');
END;
分享和享受。