2015-12-30 82 views
0

我正在執行以下查詢,我得到「ORA-01427:單行子查詢返回多行」。 錯誤在位於主SELECT中的DECODE中返回。 我無法將USER_PRF_NOTIFICATION_T表放置在FROM部分,因爲USER_PRF_NOTIFICATION_T可能不包含任何值。如果它的值不是SEC_USER_PRIV.ENTITY_ID中的值不全都存在於USER_PRF_NOTIFICATION_T.ENTITY_IDPL SQL超過單行返回問題

SELECT DISTINCT 
    SEC_USER.USR_ID   AS USR_ID, 
    SEC_USER.USR_FIRST_NAME AS USR_FIRST_NAME, 
    SEC_USER.USR_LAST_NAME AS USR_LAST_NAME, 
    SEC_USER_PRIV.ROLE_ID AS SYSTEM_ROLE_ID, 
    DECODE (
       (
       SELECT 
        SYSTMTYP_CODE 
       FROM 
        USER_PRF_NOTIFICATION_T 
       WHERE 
        USER_PRF_NOTIFICATION_T.USR_ID = SEC_USER.USR_ID 
       AND USER_PRF_NOTIFICATION_T.ENTITY_ID IN 
        (
         SELECT 
          SERVER_T.SRV_ID 
         FROM 
          SERVER_T 
         WHERE 
          UPPER(SERVER_T.SRV_NAME) LIKE UPPER('%gen%')) 
       AND USER_PRF_NOTIFICATION_T.ENTITY_TYP_CODE = 21), 1, 'SYSTEM', 2, 'TEST', NULL , 
      'ALL') AS ENTITY_SYSTM_TYP_NOTIFICATION 
FROM 
    SEC_USER_PRIV, 
    SEC_USER 
WHERE 
    SEC_USER.USR_ID = SEC_USER_PRIV.USR_ID 
AND ((
      SEC_USER_PRIV.ENTITY_TYP_CODE = 21 
     AND SEC_USER_PRIV.ENTITY_ID IN (
      (
       SELECT 
        SERVER_T.SRV_ID 
       FROM 
        SERVER_T 
       WHERE 
        UPPER(SERVER_T.SRV_NAME) LIKE UPPER('%gen%'))))) 

如何解決這個問題?直接引用實體ID顯然可以解決這個問題。 我嘗試使用tableof它包含了所有的ID和嘗試:

USER_PRF_NOTIFICATION_T.ENTITY_ID IN(tableof),但我得到了同樣的錯誤。 如何解決這個問題? 我需要在節中選擇的ID與DECODE中使用的ID之間創建關聯。

在此先感謝。

+0

查詢中的括號不看的平衡。如果您驗證上述查詢是生成您聲明的錯誤輸出的內容,我會爲您解決此問題。 –

+1

您能否修復任何語法錯誤並正確地設置代碼的格式?閱讀非常困難。 – Drumbeg

+0

@Drumbeg,完成。對於那個很抱歉。 –

回答

1

我想你在鍵/值對列表中添加了「NULL」,並且導致錯誤。

`1, 'SYSTEM', 2, 'TEST', NULL , 'ALL'` 

刪除NULL這裏

+0

但'NULL'是一個可能的值。 –