我正在执行以下查询,我得到“ORA-01427:单行子查询返回多行”。 错误在位于主SELECT中的DECODE中返回。 我无法将USER_PRF_NOTIFICATION_T表放置在FROM部分,因为USER_PRF_NOTIFICATION_T可能不包含任何值。如果它的值不是SEC_USER_PRIV.ENTITY_ID中的值不全都存在于USER_PRF_NOTIFICATION_T.ENTITY_ID。PL 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之间创建关联。
在此先感谢。
查询中的括号不看的平衡。如果您验证上述查询是生成您声明的错误输出的内容,我会为您解决此问题。 –
您能否修复任何语法错误并正确地设置代码的格式?阅读非常困难。 – Drumbeg
@Drumbeg,完成。对于那个很抱歉。 –