我正在使用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":无效标识符
到目前为止,我还没有弄清楚这个问题。我确实有权查看和更新这些字段,而且该字段确实存在。
答案 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');