OracleDatabase10gと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のエラーですか?何かご意見は?