Итак, у меня есть эта строка кода в моем SQL:
AND ((:3 IS NOT NULL
AND A.ADM_CREATION_DT BETWEEN :3 AND SYSDATE)
OR :3 IS NULL
AND :3 = SYSDATE)
То, что я хочу сделать, это то, что если Prompt 3 или: 3 имеет значение, он получает все значение ADM_CREATION_DT, которое находится между значениями: 3 и SYSDATE - это работает нормально. Что не работает, так это то, что когда: 3 пусто, следует установить значение SYSDATE, которое является текущей датой.
Я получаю ошибку ниже:
Ошибка при выполнении запроса из-за ошибки SQL, код = 8006, сообщение = указан неверный тип данных (50,380)
Я думаю, что это как-то связано с назначением SYSDATE для приглашения, где их тип данных отличается.
Кто-нибудь, кто знает, как это исправить? Большое вам спасибо.
Полный запрос представлен ниже:
SELECT A.EMPLID, B.NAME, A.ACAD_CAREER, G.STDNT_CAR_NBR, A.ADM_APPL_NBR, A.INSTITUTION, TO_CHAR(A.ADM_CREATION_DT,'YYYY-MM-DD'), TO_CHAR(A.ADM_UPDATED_DT,'YYYY-MM-DD'), A.ADM_APPL_COMPLETE, TO_CHAR(A.ADM_APPL_CMPLT_DT,'YYYY-MM-DD'), D.SRVC_IND_CD, D.SRVC_IND_REASON, E.UM_CTXT_WP_FLAG, E.UM_CTXT_WPPLS_FLAG
FROM (PS_ADM_APPL_DATA A LEFT OUTER JOIN PS_SAD_UC_APPLREC C ON A.EMPLID = C.EMPLID AND C.INSTITUTION = A.INSTITUTION ), PS_PERSON_NAME B, PS_SRVC_IND_DATA D, PS_UM_CTXT_PERCTXT E, PS_SAD_UC_DEC_MAT F, PS_ADM_APPL_PROG G
WHERE (( A.EMPLID = B.EMPLID
AND A.EMPLID = D.EMPLID
AND C.INSTITUTION = E.INSTITUTION
AND C.SAD_UC_APPCODE = E.SAD_UC_APPCODE
AND C.SAD_UC_PERS_ID = E.SAD_UC_PERS_ID
AND E.EFFDT =
(SELECT MAX(E_ED.EFFDT) FROM PS_UM_CTXT_PERCTXT E_ED
WHERE E.INSTITUTION = E_ED.INSTITUTION
AND E.SAD_UC_APPCODE = E_ED.SAD_UC_APPCODE
AND E.SAD_UC_PERS_ID = E_ED.SAD_UC_PERS_ID
AND E_ED.EFFDT <= SYSDATE)
AND E.EFFSEQ =
(SELECT MAX(E_ES.EFFSEQ) FROM PS_UM_CTXT_PERCTXT E_ES
WHERE E.INSTITUTION = E_ES.INSTITUTION
AND E.SAD_UC_APPCODE = E_ES.SAD_UC_APPCODE
AND E.SAD_UC_PERS_ID = E_ES.SAD_UC_PERS_ID
AND E.EFFDT = E_ES.EFFDT)
AND C.INSTITUTION = F.INSTITUTION
AND C.SAD_UC_APPCODE = F.SAD_UC_APPCODE
AND C.SAD_UC_PERS_ID = F.SAD_UC_PERS_ID
AND A.EMPLID = G.EMPLID
AND A.ACAD_CAREER = G.ACAD_CAREER
AND A.STDNT_CAR_NBR = G.STDNT_CAR_NBR
AND A.ADM_APPL_NBR = G.ADM_APPL_NBR
AND G.EFFDT =
(SELECT MAX(G_ED.EFFDT) FROM PS_ADM_APPL_PROG G_ED
WHERE G.EMPLID = G_ED.EMPLID
AND G.ACAD_CAREER = G_ED.ACAD_CAREER
AND G.STDNT_CAR_NBR = G_ED.STDNT_CAR_NBR
AND G.ADM_APPL_NBR = G_ED.ADM_APPL_NBR
AND G.APPL_PROG_NBR = G_ED.APPL_PROG_NBR
AND G_ED.EFFDT <= SYSDATE)
AND G.EFFSEQ =
(SELECT MAX(G_ES.EFFSEQ) FROM PS_ADM_APPL_PROG G_ES
WHERE G.EMPLID = G_ES.EMPLID
AND G.ACAD_CAREER = G_ES.ACAD_CAREER
AND G.STDNT_CAR_NBR = G_ES.STDNT_CAR_NBR
AND G.ADM_APPL_NBR = G_ES.ADM_APPL_NBR
AND G.APPL_PROG_NBR = G_ES.APPL_PROG_NBR
AND G.EFFDT = G_ES.EFFDT)
AND 1 = 1 AND F.SAD_UC_MAT_TEXT <> 'SATISFIED'
AND E.UM_CTXT_WP_FLAG = 'Y'
AND E.UM_CTXT_WPPLS_FLAG = 'Y'
AND D.SRVC_IND_CD = 'MC1'
AND D.SRVC_IND_CD = 'MDS'
AND A.INSTITUTION = :1
AND ( A.ACAD_CAREER = :2
OR ' ' = :2)
AND 1 = 1 AND (( A.EMPLID = :4
OR ' ' = :4
AND ( A.INSTITUTION = :1
AND A.ACAD_CAREER = :2)) )
AND 1 = 1 AND ((TO_DATE(:3,'YYYY-MM-DD') IS NOT NULL
AND A.ADM_CREATION_DT BETWEEN TO_DATE(:3,'YYYY-MM-DD') AND SYSDATE)
OR TO_DATE(:3,'YYYY-MM-DD') IS NULL
AND TO_DATE(:3,'YYYY-MM-DD') = SYSDATE) ));