为什么我无法将我的变量传递到我的 ORACLE SQL 语句中?

Why am I unable to pass my variables into my ORACLE SQL statement?

当我 运行 以下 SQL 代码时,我收到以下错误消息。为什么我无法将变量传递到 SQL 语句中?我不确定这是否是动态与静态 SQL 的问题,或者我是否将变量 sin 放置在不正确的位置。任何帮助将非常感激。谢谢!

ORA-00904: “FIRSTDAYNXTQTR”: 标识符无效 00904. 00000 - “%s:无效标识符” *原因:
*行动: 行错误:24 列:27

UNDEFINE FirstDayQtr
UNDEFINE FirstDayNxtQtr
DEFINE FirstDayQtr = to_date ('01-JUL-20', 'DD-MM-YY')
DEFINE FirstDayNxtQtr = to_date ('01-OCT-20', 'DD-MM-YY')




WITH ea
AS 

(

--Members that moved to VT during the qtr (eff_date during qtr)
SELECT DISTINCT SSN
, STATE
FROM (
--Effective Date During Quarter
    SELECT *
    FROM
    (SELECT * FROM EMP_ADDRESS 
    WHERE STATE = 'VT'
    AND EFF_DATE >= FirstDayQtr
    AND EFF_DATE < FirstDayNxtQtr
    AND ADDRESS_KEY = '0'
    
    )ea
    WHERE ea.EFF_DATE = (
            SELECT MAX(ea2.EFF_DATE)
                FROM EMP_ADDRESS ea2
            WHERE ea2.CONTROL_ID = ea.CONTROL_ID
            AND ea2.SSN = ea.SSN)


    UNION

    SELECT *
    FROM
    (SELECT *
    FROM EMP_ADDRESS
    WHERE STATE = 'VT'
    AND EFF_DATE < FirstDayQtr
    AND ADDRESS_KEY = '0') ea
    
    WHERE ea.EFF_DATE = (
        SELECT MAX(ea1.EFF_DATE) 
        FROM EMP_ADDRESS ea1 
        WHERE ea.ssn=ea1.ssn 
        AND ea.EFF_DATE < FirstDayQtr 
        AND ea1.EFF_DATE < FirstDayQtr))
)        

,

eid AS (
       SELECT *
    FROM
    (SELECT *
        FROM EMP_INFO_DATED eid
        WHERE eid.CONTROL_ID = 'SMLMKT'
        AND eid.EFF_DATE = (
            SELECT MAX(eid1.EFF_DATE) 
            FROM EMP_INFO_DATED eid1
            WHERE eid.SSN = eid1.SSN 
            AND eid1.CONTROL_ID = 'SMLMKT') 
     ) eid3      
    WHERE eid3.LATEST_HIRE_DATE <= FirstDayNxtQtr
    AND (eid3.LAST_TERM_DATE > FirstDayQtr
    OR eid3.LAST_TERM_DATE is NULL)
)
,


ees AS (   
    SELECT *
    FROM employee_selections ees
    WHERE ees.control_id = 'SMLMKT'
    AND ees.BENEFIT_ID = 'MEDICAL' 
    
    AND ees.life_event_date = (
        SELECT MAX(x.life_event_date) 
        FROM employee_life_events x
        WHERE x.ssn = ees.ssn
        AND x.control_id = 'SMLMKT' 
        AND ees.p_clients_id_i = x.p_clients_id_i 
        AND x.life_event_status = 'C')
    
    AND ees.le_seq_no = (
        SELECT MAX(x.le_seq_no) 
        FROM employee_life_events x 
        WHERE x.ssn = ees.ssn
        AND x.control_id = 'SMLMKT' 
        AND ees.p_clients_id_i = x.p_clients_id_i 
        AND x.life_event_status = 'C'
        AND ees.life_event_date = x.life_event_date)
    )
    
    

SELECT 
cts.NAME as "Client Name"
, cssn.REAL_SSN as "Employee SSN"
--, ea.SSN as "FAKE SSN REMOVE"
, eid.LAST_NAME as "Last Name"
, eid.FIRST_NAME as "First Name"
, ea.STATE as "Resident State"
, eid.LATEST_HIRE_DATE as "Hire Date"
, pi.DESCR1 as "Plan Name"
, ees.OPTION_ID as "Tier"
, ees.BENEFIT_EFF_DATE as "Coverage Start Date"
, eid.LAST_TERM_DATE as "Coverage End Date"
--, eid.LAST_TERM_DATE

FROM eid 
INNER JOIN ea
ON eid.SSN = ea.SSN

LEFT JOIN ees
ON eid.SSN = ees.SSN

JOIN COMP_SSN cssn
ON eid.SSN = cssn.SSN

LEFT JOIN PLAN_INFO pi
ON ees.PLAN_ID = pi.PLAN_ID
AND ees.BENEFIT_ID = pi.BENEFIT_ID 

JOIN CLIENTS cts
ON eid.CURRENT_CO = cts.CLIENTS_ID

您必须在替换变量名称前加上“&”

Using Substitution Variables