为什么我会收到此错误,未解析任何语句意味着什么。
ORA-01003: no statement parsed
以下是代码:
PROCEDURE ORIGINAL_TABLE.UPDATE_GROUPS IS
-- cursor loaded with the swam groups
CURSOR cursor1 IS
SELECT ID, NEW_DESCRIPTION
FROM NEW_TABLE.NEW_GROUP_TABLE@DB_LINK.X;
BEGIN
FOR C1_REC IN cursor1 LOOP
UPDATE
ORIGINAL_TABLE."GROUPS"
SET
GROUP_ID = C1_REC.ID
WHERE
ORIGINAL_TABLE."GROUPS".DESCRIPTION = C1_REC.NEW_DESCRIPTION;
IF (SQL%ROWCOUNT = 0) THEN
INSERT INTO
ORIGINAL_TABLE.GROUPS("GROUP_ID", "DESCRIPTION")
VALUES (C1_REC.ID, C1_REC.NEW_DESCRIPTION);
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END;
我尝试使用上面的代码来更新旧表并使用新表中的值,如果新组不存在则插入它。
更新:已更改%ROWCOUNT> 0表示%ROWCOUNT = 0
答案 0 :(得分:5)
使用MERGE语句,它确实更有效地更新/插入内容,并注意你的plsql不提供它的目的。它尝试创建更新语句,如果发现记录,则插入另一条记录。为了解决它使用 IF(SQL%ROWCOUNT = 0) 我认为问题的原因是。在DBLINK名称中。
此外,我建议删除表/字段的引用,以防模式名称。
另一个词删除所有ORIGINAL_TABLE。
merge into groups g
using (
SELECT ID, NEW_DESCRIPTION
FROM NEW_TABLE.NEW_GROUP_TABLE@DB_LINK.X
) nt
on (nt.NEW_DESCRIPTION = g.description )
when matched then update set g.group_id = nt.id
when non matched then insert(GROUP_ID, DESCRIPTION)
values(nt.id, nt.NEW_DESCRIPTION)