When I run the below SQL code I am getting the below error message. Why am I unable to pass the variables into the SQL statement? I am not sure if this is an issue of dynamic vs static SQL or if I am placing my variable sin the incorrect location. Any help would be much appreciated. Thank you!
ORA-00904: "FIRSTDAYNXTQTR": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 24 Column: 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
YOu have to prefix your substitution variable name with '&'