2017-11-21 5 views
0

にスロー私は、次のとおりクエリがある:はORA-01722:無効な数がサブクエリ

AND WAH.CHECK_DEFINITION_ID = CD.ID 
AND USR.ID = WW.ASSIGNED_TO 

:私はこれらの2行を入れない限り、

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は、上記のクエリのためにスローされます。 insideサブクエリWAH.ALERT_KEYの右括弧

ただし、これらの2行はサブクエリの一部ではありません。私はサブクエリのどのフィールドが変換失敗に不平を言うのだろうか。

+0

文字列を数値に変換しようとしたときに文字列を有効な数値に変換できない場合、ORA-01722(「無効な数値」)エラーが発生します。有効な数字には、数字の '0'から '9'、小数点以下1桁、文字列の先頭または末尾の符号(+または - )、浮動小数点の場合は 'E'または 'e'科学的表記の点番号)。その他の文字はすべて禁止されています。 http://www.orafaq.com/wiki/ORA-01722 –

+0

これらの列の1つに適切な番号ではないデータが含まれている可能性があります: 'WLM_ALERT_HEADER.CHECK_DEFINITION_ID'、' CHECK_DEFINITION.ID'、 'USERS.ID'、 'WORKFLOW_WORKITEM.ASSIGNED_TO' –

+0

これらの列の形式は同じです。NUMBER(38) – user2102665

答えて

0

まあ、エラーメッセージは、これらの比較の一つは、数

に文字列を変換することを含むテーブル

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 

を「参加」するために使用されているすべてがあなたの「サブクエリ」の1つに関する

前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 

しかし代わりに、それらのコンマの「明示的なジョイン」を使用するには絶望的な必要性があります。