You're getting the error because one of the to_number conversions fails for a specific row and column. Until you hit the row, you do not get the error, which explains why and rownum < ... runs successfully.
To determine the erring values, you can try the following query, which tests the values of the columns, which are being converted, for non-numeric values.
SELECT
inventory_view.prtnum,
inventory_view.lotnum,
inventory_view.expire_dte,
inventory_view.mandte,
to_number(inventory_view.expire_dte - inventory_view.mandte) As "DELTA",
SUBSTR(inventory_view.age_pflnam, 1, 3) As "Age Profile",
to_number((inventory_view.expire_dte - inventory_view.mandte)) - to_number(SUBSTR(inventory_view.age_pflnam, 1, 3)) AS "DELTA 2",
lst_arecod,
prt_client_id
SELECT inventory_view.*
FROM inventory_view
WHERE lst_arecod <> 'SHIP'
AND prt_client_id = 'TEST'
AND
(LOWER(inventory_view.expire_dte) <> UPPER(inventory_view.expire_dte)
OR LOWER(inventory_view.mandte) <> UPPER(inventory_view.mandte)
OR LOWER(SUBSTR(inventory_view.age_pflnam, 1, 3)) <> UPPER(SUBSTR(inventory_view.age_pflnam, 1, 3))
);
Also, you can exclude these non-numeric values in your original query, as below:
SELECT
inventory_view.prtnum,
inventory_view.lotnum,
inventory_view.expire_dte,
inventory_view.mandte,
to_number(inventory_view.expire_dte - inventory_view.mandte) As "DELTA",
SUBSTR(inventory_view.age_pflnam, 1, 3) As "Age Profile",
to_number((inventory_view.expire_dte - inventory_view.mandte)) - to_number(SUBSTR(inventory_view.age_pflnam, 1, 3)) AS "DELTA 2",
lst_arecod,
prt_client_id
SELECT inventory_view.*
FROM inventory_view
WHERE lst_arecod <> 'SHIP'
AND prt_client_id = 'TEST'
AND LOWER(inventory_view.expire_dte) = UPPER(inventory_view.expire_dte)
AND LOWER(inventory_view.mandte) = UPPER(inventory_view.mandte)
AND LOWER(SUBSTR(inventory_view.age_pflnam, 1, 3)) = UPPER(SUBSTR(inventory_view.age_pflnam, 1, 3));
Please note that the inventory_view.prtnum = inventory_view.prtnum condition has been removed since it will always be TRUE.
rownum <limit, you should be able to find the row that causes the problem. My guess is that some values ofinventory_view.age_pflnamare not numeric. - Erich Kitzmueller