为什么我得到ORA-01003:没有语句解析错误?

时间:2012-09-03 18:53:40

标签: oracle stored-procedures plsql

为什么我会收到此错误,未解析任何语句意味着什么。

 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

1 个答案:

答案 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)