SELECT count(DISTINCT DPV_ID) FROM
(
(
SELECT DISTINCT DPR_ID, DPV_ID, DPV_EFFECTIVEDATE
FROM DISTANCEPACKAGEVRS
WHERE DPV_STATUS ='A'
)
MINUS
(
SELECT DISTINCT NEWDATE.DPR_ID,NEWDATE.DPV_ID,NEWDATE.DPV_EFFECTIVEDATE
FROM
(
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM DISTANCEPACKAGEVRS
WHERE DPV_STATUS = 'A'
)
NEWDATE,
(
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM DISTANCEPACKAGEVRS
WHERE DPV_EFFECTIVEDATE <= ( CURRENT DATE - 300 DAYS )
AND DPV_STATUS = 'A'
)
OLDDATE
WHERE
NEWDATE.DPR_ID = OLDDATE.DPR_ID AND
NEWDATE.DPV_EFFECTIVEDATE < OLDDATE.DPV_EFFECTIVEDATE)
) VALID_DPV
The SQL Error message is as follows:
SQL0104N An unexpected token "count(DISTINCT DPV_ID) FROM (
( " was found following " SELECT ".Expected tokens may
include: "<space>". SQLSTATE=42601
The Statement worked fine while it was used in an Oracle 8i
environment.
...
FROM
(
select ...
) newdate,
(
select
)
DB2 UDB v8.1 Beta is available for AIX, HP, Linux, Solaris and Windows
http://www.ibm.com/db2/v8beta
Visit the DB2 UDB and DB2 Connect Online Support site at:
http://www.ibm.com/software/data/db2/udb/winos2unix/support
The EXCEPT helped indeed somewhat, thank you. However, now I stand at
a different problem. Apparently it seems to have to do something with
the setting of the brackets, or at least I think so. The revised
select statement looks as follows now:
SELECT dzl.DOR_ID, dpl.dzr_id, dzl.DDR_ID,
ddr.DDR_Destination,
dpv.DPR_ID, dpv.DPV_Version
FROM TRU_DistanceZoneLink dzl,
TRU_DestinationRef ddr,
TRU_DistancePackageVrs dpv,
TRU_DistancePackageLink dpl,
(
SELECT DPV_ID FROM
(
SELECT DISTINCT DPR_ID, DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS ='A'
EXCEPT
(
SELECT DISTINCT
NEWDATE.DPR_ID,NEWDATE.DPV_ID,NEWDATE.DPV_EFFECTIVEDATE
FROM
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS = 'A'
NEWDATE,
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_EFFECTIVEDATE <= CURRENT TIMESTAMP - 300 DAYS
AND DPV_STATUS = 'A'
OLDDATE
WHERE
NEWDATE.DPR_ID = OLDDATE.DPR_ID AND
NEWDATE.DPV_EFFECTIVEDATE < OLDDATE.DPV_EFFECTIVEDATE
)
)
) VALID_DPV
WHERE dzl.DDR_ID = ddr.DDR_ID
AND dzl.DPL_ID = dpl.DPL_ID
AND dpv.DPV_ID = dpl.DPV_ID
AND dpl.DPV_ID = VALID_DPV.DPV_ID
This statement now gives me the following error message:
SQL0104N An unexpected token
"NEWDATE.DPR_ID,NEWDATE.DPV_ID,NEWDATE.DPV_EFFE"was found following
"SELECT DISTINCT". Expected tokens may include: "<space>".
SQLSTATE=42601
SELECT dzl.DOR_ID, dpl.dzr_id, dzl.DDR_ID,
ddr.DDR_Destination,
dpv.DPR_ID, dpv.DPV_Version
FROM TRU_DistanceZoneLink dzl,
TRU_DestinationRef ddr,
TRU_DistancePackageVrs dpv,
TRU_DistancePackageLink dpl,
(
SELECT DPV_ID FROM
(
SELECT DISTINCT DPR_ID, DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS ='A'
EXCEPT
(
SELECT DISTINCT
NEWDATE.DPR_ID,NEWDATE.DPV_ID,NEWDATE.DPV_EFFECTIVEDATE
FROM
* SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
* FROM TRU_DISTANCEPACKAGEVRS
* WHERE DPV_STATUS = 'A'
NEWDATE,
* SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
* FROM TRU_DISTANCEPACKAGEVRS
* WHERE DPV_EFFECTIVEDATE <= CURRENT TIMESTAMP - 300
DAYS
* AND DPV_STATUS = 'A'
OLDDATE
WHERE
NEWDATE.DPR_ID = OLDDATE.DPR_ID AND
NEWDATE.DPV_EFFECTIVEDATE < OLDDATE.DPV_EFFECTIVEDATE
)
)
) VALID_DPV
WHERE dzl.DDR_ID = ddr.DDR_ID
AND dzl.DPL_ID = dpl.DPL_ID
AND dpv.DPV_ID = dpl.DPV_ID
AND dpl.DPV_ID = VALID_DPV.DPV_ID
Added the brackets, but still get the unexpected token error:
SELECT dzl.DOR_ID, dpl.dzr_id, dzl.DDR_ID,
ddr.DDR_Destination,
dpv.DPR_ID, dpv.DPV_Version
FROM TRU_DistanceZoneLink dzl,
TRU_DestinationRef ddr,
TRU_DistancePackageVrs dpv,
TRU_DistancePackageLink dpl,
(
SELECT DPV_ID FROM
(
SELECT DISTINCT DPR_ID, DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS ='A'
EXCEPT
(
SELECT DISTINCT
NEWDATE.DPR_ID,NEWDATE.DPV_ID,NEWDATE.DPV_EFFECTIVEDATE
FROM
(
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS = 'A'
)
NEWDATE,
(
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_EFFECTIVEDATE <= CURRENT TIMESTAMP - 300 DAYS
AND DPV_STATUS = 'A'
)
That idea really helped. Seems there was a "container" missing for one
of the selects. For your information, and those interested in the
problem, I am posting the working select statement here:
SELECT dzl.DOR_ID, dpl.dzr_id, dzl.DDR_ID,
ddr.DDR_Destination,
dpv.DPR_ID, dpv.DPV_Version
FROM TRU_DistanceZoneLink dzl,
TRU_DestinationRef ddr,
TRU_DistancePackageVrs dpv,
TRU_DistancePackageLink dpl,
(
SELECT DPV_ID FROM
(
SELECT DISTINCT DPR_ID, DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS ='A'
EXCEPT
SELECT DISTINCT
NEWDATE.DPR_ID,NEWDATE.DPV_ID,NEWDATE.DPV_EFFECTIVEDATE
FROM
(
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS = 'A'
)
NEWDATE,
(
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_EFFECTIVEDATE <= CURRENT TIMESTAMP - 300 DAYS
AND DPV_STATUS = 'A'
)
OLDDATE
WHERE
NEWDATE.DPR_ID = OLDDATE.DPR_ID AND
NEWDATE.DPV_EFFECTIVEDATE < OLDDATE.DPV_EFFECTIVEDATE
)
VALID_DPV
)VALID_DPV
WHERE dzl.DDR_ID = ddr.DDR_ID
AND dzl.DPL_ID = dpl.DPL_ID
AND dpv.DPV_ID = dpl.DPV_ID
AND dpl.DPV_ID = VALID_DPV.DPV_ID
Thanks a lot for your help.
Hmm, seems I said hurray a bit too quick. While the select statement
works really fine on the CLI, the same select statement being invoked
from a C++ program results yet again in the same old token error
message.
SELECT dzl.DOR_ID, dpl.dzr_id, dzl.DDR_ID,
ddr.DDR_Destination,
dpv.DPR_ID, dpv.DPV_Version
FROM TRU_DistanceZoneLink dzl,
TRU_DestinationRef ddr,
TRU_DistancePackageVrs dpv,
TRU_DistancePackageLink dpl,
(
SELECT DPV_ID FROM
(
SELECT DISTINCT DPR_ID, DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS ='A'
EXCEPT
SELECT DISTINCT
NEWDATE.DPR_ID,NEWDATE.DPV_ID,NEWDATE.DPV_EFFECTIVEDATE
FROM
(
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_STATUS = 'A'
)
NEWDATE,
(
SELECT DISTINCT DPR_ID,DPV_ID, DPV_EFFECTIVEDATE
FROM TRU_DISTANCEPACKAGEVRS
WHERE DPV_EFFECTIVEDATE <= CURRENT TIMESTAMP - 300 DAYS
AND DPV_STATUS = 'A'
)
OLDDATE
WHERE
NEWDATE.DPR_ID = OLDDATE.DPR_ID AND
NEWDATE.DPV_EFFECTIVEDATE < OLDDATE.DPV_EFFECTIVEDATE
) VALID_DPV
) VALID_DPV
WHERE dzl.DDR_ID = ddr.DDR_ID
AND dzl.DPL_ID = dpl.DPL_ID
AND dpv.DPV_ID = dpl.DPV_ID
AND dpl.DPV_ID = VALID_DPV.DPV_ID
SQL0104N An unexpected token "VALID_DPV" was found following
"FECTIVEDATE )". Expected tokens may include: "<space>".
SQLSTATE=42601