1

我不知道从哪里开始调试这个。一些开发人员已经在他们的 Windows 机器上本地编写了一些 pl/sql 代码,这些代码使用 Oracle 10.2.0.1.0 - 64 位可以很好地完成。当它投入生产时,即 Red Hat 5.3 并运行 10.2.0.2.0,它给了我这个错误:

ORA-00904: "S"."BARSTREAMREFERENCEID": 标识符无效

以下是在 Windows 中运行的代码的要点:

EXECUTE IMMEDIATE('
  update candyman.CANDY_REFERENCES s
     set ( s.flavour, s.taste, s.colour, s.privateField3 ) =
         ( select * from
                ( select r.flavour, r.taste, r.colour, null
                    from candyman.FOO_REFERENCE_SET t
                    join candyman.FOO_REFERENCES r on r.fooReferenceID = t.fooReferenceID
                   where t.barStreamReferenceID = s.barStreamReferenceID
                order by r.colour )
            where rownum = 1 )
   where privateField3 is not null
     and exists
         ( select 1
             from candyman.FOO_REFERENCE_SET t
             join candyman.FOO_REFERENCES r on r.fooReferenceID = t.fooReferenceID
            where t.barStreamReferenceID = s.barStreamReferenceID )
');

我知道......他们应该与公司的其他人一起更新他们的 Oracle 版本,并在与生产相同的版本上进行开发,但为时已晚,我无法控制他们......

任何想法都非常感谢。

4

1 回答 1

1

请参阅此 AskTom 线程

ANSI SQL 的表引用(相关名称)的范围只有一层

...

在 10.2.0.1.0 版本中,此查询有效:

select (select count(*) from (select * from scott.emp where ename = dual.dummy)) from dual;

...

那是一个错误。

它不适用于 9i、10g 或 11g 的任何终端版本

我是本地开发的忠实粉丝。主要好处之一是配置和管理本地实例比服务器更容易。我很惊讶开发人员不想使用更新的版本。

于 2012-12-06T20:09:30.870 回答