我在使用SQL查询时遇到问题.如果已经存在相同的行,我需要插入一行.这是我到目前为止:
DECLARE
BEGIN
FOR FOLDER_ROW IN (SELECT FOLDERID, USERID FROM DATA1.FOLDERS)
LOOP
IF NOT EXISTS (SELECT * FROM DATA1.FOLDER_USER WHERE FOLDER_ID = FOLDER_ROW.FOLDERID AND USER_ID = FOLDER_ROW.USERID)
INSERT INTO DATA1.FOLDER_USER (FOLDER_ID, USER_ID) VALUES (FOLDER_ROW.FOLDERID, FOLDER_ROW.USERID);
END LOOP;
COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)
我不会非常熟悉sql特别是不存在的语法所以当我执行时我得到以下错误:
ORA-06550:第37行,第11列:PLS-00103:当遇到以下情况之一时遇到符号"INSERT":
然后和或
符号"then"代替"INSERT"继续.
Run Code Online (Sandbox Code Playgroud)ORA-06550: line 38, column 10: PLS-00103: Encountered the symbol "LOOP" when expecting one of the following: if ORA-06550: line 40, column 5: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: end not pragma final instantiable order overriding static member constructor map
Oll*_*lie 12
在SQL中完成所有操作而不是上下文切换到PL/SQL:
INSERT INTO DATA1.FOLDERS
(folder_id,
user_id)
SELECT f1.folder_id,
f1.user_id
FROM DATA1.FOLDERS f1
WHERE NOT EXISTS (SELECT 1
FROM DATA1.FOLDERS f2
WHERE f1.folder_id = f2.folder_id
AND f1.user_id = f2.user_id);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15549 次 |
最近记录: |