I’ve almost got the query below working, however the two fields qcare_end and warranty_end both generate an invalid identifier error when executing the script
Also – i’m hoping to use this script (and a couple like it) to generate a series of operations that will take a subset of data from our oracle contract and part management database and squirt it into a mysql database which we use in support when logging incidents
Select
'Insert Into mysqldbtable (system_id, customer_code,, serial_no, system_type, description, qcare_end, warranty_end) Values ('''
|| system_id || ''',''' || customer_code || ''',''' || serial_no || ''',''' || system_type || ''',''' || description || ''')'
FROM (SELECT SYSTEMS.SYSTEM_ID
-- ,SYSTEMS.SITE_NAME
, CUSTOMER_ADDRESSES.CUSTOMER_CODE
-- , CUSTOMER_ADDRESSES.NAME
, SYSTEMS.SERIAL_NO
, SYSTEMS.SYSTEM_TYPE
, PM.DESCRIPTION
-- ,MAX(EI.END_DATE)
, TO_DATE(NULL) AS "qcare_end"
, MAX(systems.warranty_end) AS "warranty_end"
-- ,systems.warranty_code
FROM LEO.CUSTOMER_ADDRESSES CUSTOMER_ADDRESSES
-- , LEO.CUSTOMERS CUSTOMERS
, LEO.SYSTEMS SYSTEMS
-- , LEO.EXHIBIT_ITEMS EI
, LEO.PART_MASTER PM
WHERE SYSTEMS.ADDRESS_CODE = CUSTOMER_ADDRESSES.ADDRESS_CODE
-- AND CUSTOMER_ADDRESSES.CUSTOMER_CODE = CUSTOMERS.CUSTOMER_CODE
-- AND SYSTEMS.SYSTEM_ID = EI.SYSTEM_ID
AND SYSTEMS.SYSTEM_TYPE = PM.PART_NO
GROUP BY SYSTEMS.SYSTEM_ID,
SYSTEMS.SERIAL_NO,
CUSTOMER_ADDRESSES.CUSTOMER_CODE,
CUSTOMER_ADDRESSES.NAME,
SYSTEMS.SITE_NAME,
SYSTEMS.SYSTEM_TYPE,
PM.DESCRIPTION
HAVING(SYSTEMS.SYSTEM_TYPE NOT IN('COMPLETE', 'ESSENTIAL', 'LOAN DEMO', 'LOAN CUSTOMER', 'MISC',
'ORPH-CHILD-SYS', 'ORPH_CHILD_SYS', 'PROD-BOM', 'QCARE', 'QSUPPORT', 'SPARES', 'STANDARD', 'WARRANTY', 'SOFT CARE'))
AND (SYSTEMS.SITE_NAME NOT LIKE '%DO NOT USE%' AND CUSTOMER_ADDRESSES.NAME NOT LIKE 'QUANTEL%' AND CUSTOMER_ADDRESSES.NAME NOT LIKE '%LOCATION NOT KNOWN%')
UNION SELECT SYSTEMS.SYSTEM_ID
-- ,SYSTEMS.SITE_NAME
, CUSTOMER_ADDRESSES.CUSTOMER_CODE
-- , CUSTOMER_ADDRESSES.NAME
, SYSTEMS.SERIAL_NO
, SYSTEMS.SYSTEM_TYPE
, PM.DESCRIPTION
-- ,MAX(EI.END_DATE)
, MAX(EI.END_DATE) AS "QCare_End"
, TO_DATE(NULL) "Warranty_End"
-- ,MAX(systems.warranty_end)
-- ,systems.warranty_code
FROM LEO.CUSTOMER_ADDRESSES CUSTOMER_ADDRESSES
-- , LEO.CUSTOMERS CUSTOMERS
, LEO.SYSTEMS SYSTEMS
, LEO.EXHIBIT_ITEMS EI
, LEO.PART_MASTER PM
WHERE SYSTEMS.ADDRESS_CODE = CUSTOMER_ADDRESSES.ADDRESS_CODE
-- AND CUSTOMER_ADDRESSES.CUSTOMER_CODE = CUSTOMERS.CUSTOMER_CODE
AND SYSTEMS.SYSTEM_ID = EI.SYSTEM_ID
AND SYSTEMS.SYSTEM_TYPE = PM.PART_NO
GROUP BY SYSTEMS.SYSTEM_ID,
SYSTEMS.SERIAL_NO,
CUSTOMER_ADDRESSES.CUSTOMER_CODE,
CUSTOMER_ADDRESSES.NAME,
SYSTEMS.SITE_NAME,
SYSTEMS.SYSTEM_TYPE,
PM.DESCRIPTION
HAVING(SYSTEMS.SYSTEM_TYPE NOT IN('COMPLETE', 'ESSENTIAL', 'LOAN DEMO', 'LOAN CUSTOMER'
, 'MISC', 'ORPH-CHILD-SYS', 'ORPH_CHILD_SYS', 'PROD-BOM', 'QCARE', 'QSUPPORT', 'SPARES', 'STANDARD', 'WARRANTY', 'SOFT CARE'))
AND (SYSTEMS.SITE_NAME NOT LIKE '%DO NOT USE%' AND CUSTOMER_ADDRESSES.NAME NOT LIKE 'QUANTEL%' AND CUSTOMER_ADDRESSES.NAME NOT LIKE '%LOCATION NOT KNOWN%'))
where ROWNUM <= 10 ORDER BY SERIAL_NO;
This just returns 10 results, and it seems pretty sane – but if I re-add the qcare and warranty end dates, it fails with the following error:
65 where ROWNUM <= 10 ORDER BY SERIAL_NO;
|| system_id || ”’,”’ || customer_code || ”’,”’ || serial_no || ”’,”’ || system_type || ”’,”’ || description || ”’,”’
||qcare_end|| ”’,”’ ||warranty_end|| ”’)’
* ERROR at line 3: ORA-00904: “WARRANTY_END”: invalid identifierSQL>
I’m not sure why table aliases wouldn’t work – it seems to be fine in regular queries, but not when I’m trying to generate the import statements that I can then pipe into mysql periodically.
Any thoughts on what I’m missing?
Cheers
Scott
Scott,
The aliases don’t work because you’ve put them in double quotes and in mixed case (hint: don’t do that). That means you have to reference them that way:
You probably want this instead, which makes your aliases all upper case:
And
Technically, you don’t need the aliases in the second half of the union anyway, it’s the first half of the union that drives the column names for the in-line view.