我发现 Oracle 数据库 10g 和 11g 对以下 PL/SQL 块的处理方式不同(为了方便,我使用了 scott 模式):
DECLARE
v_ename bonus.ename%TYPE;
BEGIN
SELECT b.ename
INTO v_ename
FROM bonus b
JOIN emp e ON b.ename = e.ename
JOIN dept d ON d.deptno = e.deptno
WHERE b.ename = 'Scott'
FOR UPDATE OF b.ename;
END;
/
虽然在 10g (10.2) 中,此代码成功结束(好吧,引发了 NO_DATA_FOUND 异常,但这是意料之中的),但在 11g (11.2) 中,它引发了异常“列模糊定义”。这绝对不是预期的。似乎它没有考虑表别名,因为我发现当我将 FOR UPDATE OF e.empno(也不起作用)中的列更改为e.mgr(这是唯一的)时,它开始工作。那么这是11g中的一些错误吗?有什么想法吗?