ORA-01722: неверный номер выбрасывает в подзапрос
У меня есть запрос согласно следующему:
SELECT
WAH.ALERT_KEY AS ALERT_KEY,
TRUNC(WAH.EVENT_DATE) AS ALERT_DATE,
WAH.AT_DATASOURCE_ID AS DATA_SOURCE_ID,
WAH.CHECK_DEFINITION_ID AS CHECK_ID,
OU.ID AS ORGUNIT_ID,
USR.ID AS USER_ID,
GRP.ID AS GROUP_ID,
CUS.SOURCE_SYSTEM AS SOURCE_SYTEM
FROM
WLM_ALERT_HEADER WAH,
CHECK_DEFINITION CD,
ORGANIZATION_UNITS OU,
USERS USR,
GROUPS GRP,
CUSTOMERS CUS,
WORKFLOW_WORKITEM WW
WHERE
WAH.ALERT_KEY in (
select
ENTITY_KEY
from
WORKFLOW_WORKITEM ww
where
ww.STATUS_ID in (
select
ID
from
WORKFLOW_STATUSES ws
where
ws.CODE IN (
'S_GE_WLM_WL_001', 'S_GE_WLM_WL_002',
'S_GE_WLM_WL_003', 'S_GE_WLM_WL_004',
'S_GE_WLM_WL_007', 'S_GE_WLM_WL_010'
)
and ww.ORGUNIT_ID in (
select
ou.ID
from
ORGANIZATION_UNITS ou
where
ou.ID = (
select
cus.ORGUNIT_ID
from
CUSTOMERS cus
where
cus.CUSTOMER_ID = wah.CUSTOMER_ID
)
)
)
)
AND WAH.CHECK_DEFINITION_ID = CD.ID
AND USR.ID = WW.ASSIGNED_TO
AND GRP.ID IN (
select
GROUP_ID
from
USER_GROUP_RELATIONS
where
USER_ID = USR.ID
)
AND WW.ENTITY_NAME = 'WLM Alert';
ORA-01722 выбрасывается для вышеупомянутого запроса, если я не поставлю эти 2 строки:
AND WAH.CHECK_DEFINITION_ID = CD.ID
AND USR.ID = WW.ASSIGNED_TO
внутри правой скобки подзапроса WAH.ALERT_KEY в
Однако это не должно быть так, поскольку эти 2 строки не являются частью подзапроса. Интересно, какое поле в подзапросе жалуется на сбой преобразования.
1 ответ
Решение
Ну, сообщение об ошибке относится к одному из ваших "подзапросов", все из которых были использованы для "объединения" таблиц
WHERE wah.ALERT_KEY IN ( SELECT ENTITY_KEY FROM WORKFLOW_WORKITEM ww
WHERE ww.STATUS_ID IN ( SELECT ID FROM WORKFLOW_STATUSES ws
AND ww.ORGUNIT_ID IN ( SELECT ou.ID FROM ORGANIZATION_UNITS ou
AND grp.ID IN ( SELECT GROUP_ID FROM USER_GROUP_RELATIONS
Одно из этих сравнений включает преобразование строки в число
До предложения where нет подзапросов:
SELECT
wah.ALERT_KEY AS alert_key
, TRUNC(wah.EVENT_DATE) AS alert_date
, wah.AT_DATASOURCE_ID AS data_source_id
, wah.CHECK_DEFINITION_ID AS check_id
, ou.ID AS orgunit_id
, usr.ID AS user_id
, grp.ID AS group_id
, cus.SOURCE_SYSTEM AS source_sytem
FROM WLM_ALERT_HEADER wah
, CHECK_DEFINITION cd
, ORGANIZATION_UNITS ou
, USERS usr
, GROUPS grp
, CUSTOMERS cus
, WORKFLOW_WORKITEM ww
Однако существует острая необходимость использовать "явные объединения" вместо этих запятых.