Oracle pl / sql case when операторы - PullRequest
0 голосов
/ 13 июля 2020

У меня есть отрывок из представленного ниже представления, в котором есть оператор case, который ищет определенные значения в других таблицах и присваивает им значение в представлении. Я получаю сообщение об ошибке:

[Error] Execution (114: 12): ORA-24344: success with compilation error
ORA-43916: unable to determine collation for the column
ORA-00904: "V"."VPAA_FACULTY_DEGREE_CODE": invalid identifier

Вот мой код ниже (остальная часть оператора case работала нормально, пока я не добавил первый появляющийся оператор case, поэтому я не включил его). Любая помощь приветствуется, спасибо.

CAST(
    CASE                   
                   WHEN (I.EMPLOYEE_DEPARTMENT_HOME_ORG = '555' 
                            OR I.EMPLOYEE_DEPARTMENT_HOME_ORG = '556')
                        AND (V.FACULTY_DEGREE_CODE = 'MA'
                            OR V.FACULTY_DEGREE_CODE = 'MS')                                                                             
                   THEN
                       (SELECT CASE
                                   WHEN C.DEGREE_STATUS =
                                        'Terminal'
                                   THEN
                                       'Yes'
                                   WHEN C.DEGREE_STATUS =
                                        'Not terminal'
                                   THEN
                                       'No'
                                   ELSE
                                       'NEEDS REVIEW'
                               END
                          FROM V_FACULTY_DEGREES  V
                               INNER JOIN C_INSTRUCTORS C
                                   ON V.FACULTY_DEGREE_CODE =
                                      C.FACULTY_DEGREE_CODE
                               INNER JOIN CLIC_INSTRUCTORS C
                                   ON C.VPAA_FACULTY_SUBJECT_CODE =
                                      V.VPAA_FACULTY_SUBJECT_CODE
                               INNER JOIN I_REPORT_DETAILS I
                                   ON V.ID = I.ID
                         WHERE V.PERSON_SKEY = SRC.PERSON_SKEY
                         FETCH FIRST ROW ONLY)
                  WHEN EXISTS
                            --(other code)
                   THEN
                       (SELECT CASE
                                   --other ocde
                               END
                          FROM --other code
                         FETCH FIRST ROW ONLY)
                   ELSE
                       (  SELECT CASE
                                     --other code
                                 END
                            FROM --other code
                           FETCH FIRST ROW ONLY)
               END
                   AS VARCHAR2 (50))
               TERMINAL_DEG,

1 Ответ

1 голос
/ 13 июля 2020

У вас есть два оператора case, но завершен только один.

CASE                   
                   WHEN (I.EMPLOYEE_DEPARTMENT_HOME_ORG = '555' 
                            OR I.EMPLOYEE_DEPARTMENT_HOME_ORG = '556')
                        AND (V.FACULTY_DEGREE_CODE = 'MA'
                            OR V.FACULTY_DEGREE_CODE = 'MS')                                                                             
                   THEN
                       (SELECT CASE
                                   WHEN C.DEGREE_STATUS =
                                        'Terminal'
                                   THEN
                                       'Yes'
                                   WHEN C.DEGREE_STATUS =
                                        'Not terminal'
                                   THEN
                                       'No'
                                   ELSE
                                       'NEEDS REVIEW'
                               END
             END
                          FROM V_FACULTY_DEGREES  V
                               INNER JOIN C_INSTRUCTORS C
                                   ON V.FACULTY_DEGREE_CODE =
                                      C.FACULTY_DEGREE_CODE
                               INNER JOIN C_INSTRUCTORS C
                                   ON C.FACULTY_SUBJECT_CODE =
                                      V.FACULTY_SUBJECT_CODE
                               INNER JOIN I_REPORT_DETAILS I
                                   ON V.ID = I.ID
                         WHERE V.PERSON_SKEY = SRC.PERSON_SKEY
                         FETCH FIRST ROW ONLY)
...