PL SQL 多行返回问题
PL SQL more than single row returned issue
我正在执行以下查询并得到 "ORA-01427: single-row subquery returns more than one row"。
位于主要 SELECT 中的 DECODE 中的错误 returns。
我无法将 USER_PRF_NOTIFICATION_T table 放在 FROM 部分中,因为 USER_PRF_NOTIFICATION_T 可能不包含任何值.如果是,则 SEC_USER_PRIV.ENTITY_ID 中的值并不都存在于 USER_PRF_NOTIFICATION_T.ENTITY_ID.
中
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 显然可以解决该问题。
我尝试使用包含所有 ID 的 tableof 并尝试:
USER_PRF_NOTIFICATION_T.ENTITY_ID IN (tableof) 但我得到了同样的错误。
如何解决这个问题?
我需要在 FROM 部分中选择的 ID 与 DECODE 中使用的 ID 之间建立关联。
提前致谢。
我认为您在 key/value 对列表中添加了 "NULL",这是导致错误的原因。
`1, 'SYSTEM', 2, 'TEST', NULL , 'ALL'`
这里去掉NULL
我正在执行以下查询并得到 "ORA-01427: single-row subquery returns more than one row"。 位于主要 SELECT 中的 DECODE 中的错误 returns。 我无法将 USER_PRF_NOTIFICATION_T table 放在 FROM 部分中,因为 USER_PRF_NOTIFICATION_T 可能不包含任何值.如果是,则 SEC_USER_PRIV.ENTITY_ID 中的值并不都存在于 USER_PRF_NOTIFICATION_T.ENTITY_ID.
中 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 显然可以解决该问题。 我尝试使用包含所有 ID 的 tableof 并尝试:
USER_PRF_NOTIFICATION_T.ENTITY_ID IN (tableof) 但我得到了同样的错误。 如何解决这个问题? 我需要在 FROM 部分中选择的 ID 与 DECODE 中使用的 ID 之间建立关联。
提前致谢。
我认为您在 key/value 对列表中添加了 "NULL",这是导致错误的原因。
`1, 'SYSTEM', 2, 'TEST', NULL , 'ALL'`
这里去掉NULL