为什么我得到ORA-01003:没有语句解析错误?
为什么我会收到此错误,以及解析的语句是什么意思。为什么我得到ORA-01003:没有语句解析错误?
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 [email protected]_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
用MERGE语句,它更有效地做更新/插入的东西,要注意你的PLSQL没有提供它专供。它试图做一个更新声明,如果一条记录发现它插入另一条记录。为了解决它使用 IF(SQL%ROWCOUNT = 0) 我认为这个问题的原因是。以DBLINK名义。
此外,我建议摆脱引用的表/字段以防万一以及模式名称。
换句话说删除全部ORIGINAL_TABLE。
merge into groups g
using (
SELECT ID, NEW_DESCRIPTION
FROM [email protected]_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)
是的,关于ORIGINAL_TABLE我将原来的表格名称更改为在此处发布。 –
块何时失败?在更新或插入语句?注释他们两个替换为NULL;如果它没有帮助让我们继续 –
它执行失败,它不会更新或插入。 –
您是否在另一窗口中测试了光标查询?我认为这是因为查询 – HRgiger
这是当你编译过程或当你执行它?你有线吗?也许你需要删除测试的异常。还有什么让我困惑的是,为什么当SQL%ROWCOUNT'is> 0应该不是= 0时插入呢?但那不是你的问题。是的,选择是否作为一个单一的声明? – hol
是的选择作为一个单一的声明,它发生在我执行程序时。它编译没有错误。 –