UPDATE で WITH を使用する場合、更新テーブルにエイリアスを使用する必要があります。そうでなければ機能しません。
また、WITH CLAUSE で UPDATED TABLE を呼び出すことはできません。その時点では、そのテーブルは不明です。そのため、INVALID IDENTIFIER が返されます。問題を解決するには、その条件を削除して最後に追加する必要があります。
これを試してみてください。ただし、データ モデルも知らずに書いているので注意してください。
UPDATE SNP_FACULTY_CENSUS SFC SET OIR_TERMINAL_DEGREE = ( WITH HIGHES_DEG_VALUE AS ( SELECT max(D.OIR_DEGREE_HIERARCHY) AS MAX_DEG FROM VPAA_PPAGGENL_FIS V JOIN DIM_DEGREE_CROSSWALK D ON V.VPAA_FACULTY_DEGREE_CODE = D.VPAA_DEGREE_CODE LEFT JOIN SNP_FACULTY_CENSUS S ON V.PERSON_SKEY = S.PERSON_SKEY ) SELECT CASE WHEN MAX_DEG = 30 THEN --CHECK IF EXIST ON CROSSWALKS AND USE THAT VALUE IF IT DOES (CASE WHEN EXISTS (SELECT V.VPAA_FACULTY_DEGREE_CODE, --IF ON SUBJ CODE CROSSWALK V.VPAA_FACULTY_SUBJECT_CODE FROM VPAA_PPAGGENL_FIS V JOIN DIM_DEGREE_CROSSWALK D ON V.VPAA_FACULTY_DEGREE_CODE = D.VPAA_DEGREE_CODE INNER JOIN SUBJ_CODE_CROSSWALK S ON V.VPAA_FACULTY_DEGREE_CODE = S.VPAA_FACULTY_DEGREE_CODE and S.VPAA_FACULTY_SUBJECT_CODE = V.VPAA_FACULTY_SUBJECT_CODE WHERE V.PERSON_SKEY = SNP_FACULTY_CENSUS.PERSON_SKEY ----CHANGE TO = SRC.PERSON_SKEY ) THEN (SELECT DISTINCT -- USE TERMINAL VALUE FROM SUBJ CODE CASE WHEN s.OIR_TERMINAL_DEGREE_STATUS = 'Terminal' THEN 'Yes' WHEN s.OIR_TERMINAL_DEGREE_STATUS = 'Not terminal' THEN 'No' ELSE 'Unknown' END FROM SUBJ_CODE_CROSSWALK S INNER JOIN VPAA_PPAGGENL_FIS V ON V.VPAA_FACULTY_DEGREE_CODE = S.VPAA_FACULTY_DEGREE_CODE AND S.VPAA_FACULTY_SUBJECT_CODE = V.VPAA_FACULTY_SUBJECT_CODE WHERE V.PERSON_SKEY = SNP_FACULTY_CENSUS.PERSON_SKEY )----CHANGE TO = SRC.PERSON_SKEY ) WHEN EXISTS (SELECT DISTINCT V.VPAA_FACULTY_DEGREE_CODE, --IF ON CLIC INSTRUCTORS CROSSWALK V.VPAA_FACULTY_SUBJECT_CODE, I.OIR_EMPLOYEE_DEPARTMENT_HOME_ORG FROM VPAA_PPAGGENL_FIS V INNER JOIN CLIC_INSTRUCTORS_CROSSWALK C ON V.VPAA_FACULTY_DEGREE_CODE = C.VPAA_FACULTY_DEGREE_CODE AND V.VPAA_FACULTY_SUBJECT_CODE = C.VPAA_FACULTY_SUBJECT_CODE INNER JOIN IPEDS_REPORT_DETAILS I ON V.PIDM = I.HR_PIDM WHERE V.PERSON_SKEY = SNP_FACULTY_CENSUS.PERSON_SKEY ----CHANGE TO = SRC.PERSON_SKEY AND (I.OIR_EMPLOYEE_DEPARTMENT_HOME_ORG = '396000' OR I.OIR_EMPLOYEE_DEPARTMENT_HOME_ORG = '396010') ) THEN (SELECT DISTINCT CASE WHEN C.OIR_TERMINAL_DEGREE_STATUS = 'Terminal' THEN 'Yes' WHEN C.OIR_TERMINAL_DEGREE_STATUS = 'Not terminal' THEN 'No' ELSE 'Unknown' END FROM CLIC_INSTRUCTORS_CROSSWALK C INNER JOIN VPAA_PPAGGENL_FIS V ON C.VPAA_FACULTY_DEGREE_CODE = V.VPAA_FACULTY_DEGREE_CODE AND C.VPAA_FACULTY_SUBJECT_CODE = V.VPAA_FACULTY_SUBJECT_CODE WHERE V.PERSON_SKEY = SNP_FACULTY_CENSUS.PERSON_SKEY )----CHANGE TO = SRC.PERSON_SKEY) ELSE --USE DIM DEGREE CROSSWALK NORMALLY (SELECT DISTINCT CASE WHEN D.OIR_TERMINAL_DEGREE_STATUS = 'Terminal' THEN 'Yes' WHEN D.OIR_TERMINAL_DEGREE_STATUS = 'Not terminal' THEN 'No' ELSE 'Unknown' END FROM DIM_DEGREE_CROSSWALK D JOIN VPAA_PPAGGENL_FIS V ON V.VPAA_FACULTY_DEGREE_CODE = D.VPAA_DEGREE_CODE WHERE V.PERSON_SKEY = SNP_FACULTY_CENSUS.PERSON_SKEY ----CHANGE TO = SRC.PERSON_SKEY) ORDER BY OIR_DEGREE_HIERARCHY DESC FETCH FIRST ROW ONLY ) END) --USE DIM DEGREE CROSSWALK FOR THE TERMINAL VALUE FOR THE MAX DEG THERE WHEN MAX_DEG != 30 THEN (SELECT DISTINCT CASE WHEN D.OIR_TERMINAL_DEGREE_STATUS = 'Terminal' THEN 'Yes' WHEN D.OIR_TERMINAL_DEGREE_STATUS = 'Not terminal' THEN 'No' ELSE 'Unknown' END FROM DIM_DEGREE_CROSSWALK D JOIN VPAA_PPAGGENL_FIS V ON V.VPAA_FACULTY_DEGREE_CODE = D.VPAA_DEGREE_CODE WHERE V.PERSON_SKEY = SNP_FACULTY_CENSUS.PERSON_SKEY ----CHANGE TO = SRC.PERSON_SKEY) ORDER BY OIR_DEGREE_HIERARCHY DESC FETCH FIRST ROW ONLY ) ELSE NULL END FROM HIGHES_DEG_VALUE ) WHERE SNP_FACULTY_CENSUS.OIR_FALL_TERM = 'Fall 2019' ;
プレ>