2014-03-24 19 views
0

我正在使用PeopleSoft Campus Solutions,我們需要更新大約22,000行數據。這是ACAD_PLAN_VW和ACAD_PROG表之間的數據。學生都列在兩者中,所以他們的ID在兩者之間匹配。ORA-00904無效標識符 - 使用兩個表更新語句

基本上我們要做的就是說當身份證,學術事業,學生職業數量,有效順序和生效日期匹配時,以及學術計劃(他們的學位,存儲在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": invalid identifier

我還沒有弄清楚這個問題。我確實具有查看和更新​​這些字段的正確訪問權限,並且該字段確實存在。

回答

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' 
+0

感謝您的建議。我剛剛嘗試了這一點,並且下降到最後一行併發出了相同的錯誤。 – user3455572

+0

您可以嘗試刪除PS_ACAD_PLAN_VW。從最後一次參考?或者可能是PS_ACAD_PROG。以及。 (在生產系統上運行之前在某個地方進行測試......) –

+0

我從最後一行刪除了PS_ACAD_PLAN_VW。然後它發生了錯誤,並說PS_ACAD_PROG.ACAD_PROG無效。刪除PS_ACAD_PROG。從該行的前面給予我一個不同的錯誤: > ORA-00918:列模糊定義 – user3455572