Reputation: 11
I'm trying to understand why i am now getting this error ORA-00920.
(SOURCE_REF1, SOURCE_REF2, SOURCE_REF3, RECEIPT_NO) IN (SELECT ORDER_NO, LINE_NO, RELEASE_NO, RECEIPT_NO FROM &AO.PURCHASE_RECEIPT_STATISTICS WHERE order_line_objstate IN ('Arrived', 'Received', 'Closed')
AND qty_arrived > 0
AND rental_db = 'FALSE'
AND NVL(&AO.COMPANY_SITE_API.GET_COMPANY(CONTRACT),'%') LIKE NVL('$COMPANY$','%')
AND NVL(CONTRACT,'%') LIKE NVL('$SITE$','%')
AND NVL(VENDOR_NO,'%') LIKE NVL('$SUPPLIER_ID$','%')
AND NVL(&AO.PURCHASE_ORDER_API.GET_BUYER_CODE(ORDER_NO),'%') LIKE NVL('$PERSON_BUYER$','%')
AND REAL_ARRIVAL_DATE >= SYSDATE-$DAYS$)
AND &AO.Purchase_Stat_Util_API.Get_Max_Days_Late (SOURCE_REF1, SOURCE_REF2, SOURCE_REF3, RECEIPT_NO) = 0
AND &AO.Purchase_Stat_Util_API.Get_Max_Days_Early (SOURCE_REF1, SOURCE_REF2, SOURCE_REF3, RECEIPT_NO) = 0
AND EXTRACT(YEAR FROM DELIVERY_DATE) LIKE NVL('$YEAR$','%')
AND EXTRACT(MONTH FROM DELIVERY_DATE) LIKE NVL('$MONTH$','%')
checked all Parenthesis
Upvotes: 0
Views: 71
Reputation: 168730
Indenting your query makes it so much easier to work out which parts are related to which other parts:
WHERE (SOURCE_REF1, SOURCE_REF2, SOURCE_REF3, RECEIPT_NO) IN (
SELECT ORDER_NO, LINE_NO, RELEASE_NO, RECEIPT_NO
FROM &AO.PURCHASE_RECEIPT_STATISTICS
WHERE order_line_objstate IN ('Arrived', 'Received', 'Closed')
AND qty_arrived > 0
AND rental_db = 'FALSE'
AND NVL(&AO.COMPANY_SITE_API.GET_COMPANY(CONTRACT),'%') LIKE NVL('$COMPANY$','%')
AND NVL(CONTRACT,'%') LIKE NVL('$SITE$','%')
AND NVL(VENDOR_NO,'%') LIKE NVL('$SUPPLIER_ID$','%')
AND NVL(&AO.PURCHASE_ORDER_API.GET_BUYER_CODE(ORDER_NO),'%') LIKE NVL('$PERSON_BUYER$','%')
AND REAL_ARRIVAL_DATE >= SYSDATE-$DAYS$
)
AND &AO.Purchase_Stat_Util_API.Get_Max_Days_Late (SOURCE_REF1, SOURCE_REF2, SOURCE_REF3, RECEIPT_NO) = 0
AND &AO.Purchase_Stat_Util_API.Get_Max_Days_Early (SOURCE_REF1, SOURCE_REF2, SOURCE_REF3, RECEIPT_NO) = 0
AND EXTRACT(YEAR FROM DELIVERY_DATE) LIKE NVL('$YEAR$','%')
AND EXTRACT(MONTH FROM DELIVERY_DATE) LIKE NVL('$MONTH$','%')
If your query is being run through a pre-processor that replaces all the $$
delimited strings with actual values then it is "fine" (probably, assuming your pre-processor does not introduce any SQL injection vulnerabilities); however, if you don't run it through any pre-processor then:
SYSDATE-$DAYS$
Is not valid SQL and generates the syntax error you are seeing.
Upvotes: 0