Я обнаружил, что Oracle Database 10g и 11g по-разному относятся к следующему блоку PL / SQL (для удобства я использую схему Скотта):
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? Есть мысли?