ORA-00904无效的标识符 - 具有两个表的更新语句

时间:2014-03-24 13:48:50

标签: sql oracle

我正在使用PeopleSoft校园解决方案,我们需要更新大约22,000行数据。这是ACAD_PLAN_VW和ACAD_PROG表之间的数据。学生列在两者上,因此他们的ID在两者之间匹配。

基本上我们要做的是说当ID,学术生涯,学生职业生涯编号,有效序列和生效日期匹配时,以及学术计划(他们的学位,存储在ACAD_PLAN_VW上)是特定的值,将ACAD_PROG表上的ACAD_PROG更新为X值。

我尝试做一些非常有趣的FROM语句组合,不断收到错误。经过一番研究,我发现SQLTools并不像UPDATE语句中的FROM语句那样,所以我重新编写它只是手动建立连接。我假设我做对了,除非我需要改写它。

我的陈述是:

UPDATE PS_ACAD_PROG SET PS_ACAD_PROG.ACAD_PROG = 'UGDS'
WHERE PS_ACAD_PLAN_VW.EMPLID = PS_ACAD_PROG.EMPLID
AND PS_ACAD_PLAN_VW.ACAD_CAREER = PS_ACAD_PROG.ACAD_CAREER
AND PS_ACAD_PLAN_VW.STDNT_CAR_NBR = PS_ACAD_PROG.STDNT_CAR_NBR
AND PS_ACAD_PLAN_VW.EFFSEQ = PS_ACAD_PROG.EFFSEQ
AND PS_ACAD_PLAN_VW.EFFDT = PS_ACAD_PROG.EFFDT
AND PS_ACAD_PLAN_VW.ACAD_PLAN = 'DSTDS'

理论上,我认为这会更新任何有这些联系的学生。但是,我目前得到的错误如下:

  

ORA-00904:" PS_ACAD_PLAN_VW"。" ACAD_PLAN":无效标识符

到目前为止,我还没有弄清楚这个问题。我确实有权查看和更新​​这些字段,而且该字段确实存在。

3 个答案:

答案 0 :(得分:0)

Oracle不知道它应该使用PS_ACAD_PLAN_VW表。不知怎的,你应该参考它。

例如,您可以尝试这种方式吗?

UPDATE (
  select
    PS_ACAD_PROG.ACAD_PROG,
    PS_ACAD_PLAN_VW.ACAD_PLAN
  from
    PS_ACAD_PROG,
    PS_ACAD_PLAN_VW
  where
    PS_ACAD_PLAN_VW.EMPLID = PS_ACAD_PROG.EMPLID
    AND PS_ACAD_PLAN_VW.ACAD_CAREER = PS_ACAD_PROG.ACAD_CAREER
    AND PS_ACAD_PLAN_VW.STDNT_CAR_NBR = PS_ACAD_PROG.STDNT_CAR_NBR
    AND PS_ACAD_PLAN_VW.EFFSEQ = PS_ACAD_PROG.EFFSEQ
    AND PS_ACAD_PLAN_VW.EFFDT = PS_ACAD_PROG.EFFDT
)
SET
  ACAD_PROG = 'UGDS'
WHERE
  ACAD_PLAN = 'DSTDS'

答案 1 :(得分:0)

通过保留where子句以尝试使用未声明的表,以便可以使用select语句。这将有助于识别表。

答案 2 :(得分:0)

以下实现应起作用:

UPDATE PS_ACAD_PROG 
   SET ACAD_PROG = 'UGDS'
 WHERE ROWID IN(SELECT PROG.ROWID 
                  FROM PS_ACAD_PROG PROG
                     , PS_ACAD_PLAN_VW PLAN
                 WHERE PLAN.EMPLID        = PROG.EMPLID
                   AND PLAN.ACAD_CAREER   = PROG.ACAD_CAREER
                   AND PLAN.STDNT_CAR_NBR = PROG.STDNT_CAR_NBR
                   AND PLAN.EFFSEQ        = PROG.EFFSEQ
                   AND PLAN.EFFDT         = PROG.EFFDT
                   AND PLAN.ACAD_PLAN     = 'DSTDS');