plsql - 在 Oracle 数据库 10g 和 11g 中选择更新...的差异

标签 plsql oracle10g oracle11g

我发现 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 中的一些错误吗?有什么想法吗?

最佳答案

这是 Oracle 11G 中的一个错误。它在 11.2.0.2 版本中得到修复。已在此线程中讨论过:https://forums.oracle.com/forums/thread.jspa?threadID=2314477

关于plsql - 在 Oracle 数据库 10g 和 11g 中选择更新...的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2736426/

相关文章:

sql - 在针对 Oracle 编写良好的 SQL 时,您会给您的开发人员什么简单的指导方针?

oracle10g - 如何更改此查询以使其适用于某个日期范围

sql - Oracle 10g 范围分区查询

oracle - 提高 Oracle DELETE 性能的策略

sql-server - 无法参与交易

sql - 分层查询 : from dual is ok, 但来自物理表的是 "ORA-01436"

sql - 根据 oracle apex 中的条件更改穿梭机的文本颜色

oracle - 在插入 oracle 之后延迟触发器调用

PLSQL 在 ajax 回调中工作不正确

oracle - 如何获取 Oracle 数据库中发生的插入/更新次数?