三张桌子:
在特定日期之前创建的所有用户都需要获得新项目。
该项目的数据存储在item_history“文本”中以用于历史记录。
这些新项目的文本对所有用户都是相同的。
由于有很多用户,我需要一个可以为所有用户创建新项目和相应item_histories的脚本。
我想这不能用SQL完成,我的PLSQL知识基本上不存在?
我已经选择了应该获得新项目的用户,但我不知道如何为他们创建新项目以及那些项目item_histories。
答案 0 :(得分:1)
尝试:
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_ID_SEQ为具有正确序列名称的ITEM_HISTORY表。
以上创建了一个程序。要使用它,您需要按如下方式调用它:
BEGIN
ADD_ITEM_TEXT('Text for an item');
ADD_ITEM_TEXT('Text for another item');
ADD_ITEM_TEXT('Text for the last item');
END;
分享并享受。