Oracle11g ORA-01427:插入多行时,单行子查询返回多行

Oracle11g ORA-01427:插入多行时,单行子查询返回多行,oracle11g,Oracle11g,我正在尝试将一个用户的所有权限分配或授予另一个给定用户,13053,但遇到此Oracle错误,ORA-01427:单行子查询返回多行,我确切地知道下面显示的SQL语句的哪个部分返回此错误,但未能处理它,因为我想要实现的是将返回的多行赋予给定用户id为13053 我的尝试 INSERT INTO userpermissions ( userid,permissionid ) VALUES ( 13053,( SELECT permissionid FROM us

我正在尝试将一个用户的所有权限分配或授予另一个给定用户,
13053
,但遇到此Oracle错误,
ORA-01427:单行子查询返回多行
,我确切地知道下面显示的SQL语句的哪个部分返回此错误,但未能处理它,因为我想要实现的是将返回的多行赋予给定用户id为
13053

我的尝试

INSERT INTO userpermissions (
     userid,permissionid
) VALUES (
     13053,( SELECT permissionid
        FROM userpermissions
        WHERE userid = ( SELECT userid
                         FROM users
                         WHERE username = '200376'
                       )
      )
);
有什么帮助吗


提前感谢。

重写应该可以做到:

INSERT INTO USERPERMISSIONS(
  USERID,
  PERMISSIONID
)
 SELECT 13053 AS USERID,
        p.PERMISSIONID
   FROM USERPERMISSIONS p
  WHERE p.userid = (SELECT userid FROM users WHERE username = '200376');
原始insert的问题是,当您真正尝试插入一组行时,您使用的是单行insert语法


将目标userid包含为文字是一种使行集看起来像我假设的那样的方法。

感谢您帮助我找到正确答案。但是,如果将这些权限授予多个用户而不是一个用户(以文字表示),该怎么办?@CCC,你是什么意思?您想编写一条SQL语句,将用户200376的权限授予短列表用户(例如13053、13054和13055),还是正在尝试一种更通用的解决方案?一条SQL语句,通过假设短列表来自另一个表,将用户200376的权限授予短列表用户(例如13053、13054和13055)。