【问题标题】:ORA-01427: single-row subquery returns more than one row when inserting multiple rowsORA-01427: 单行子查询在插入多行时返回多于一行
【发布时间】:2019-08-06 21:32:40
【问题描述】:

我正在尝试将用户的所有权限分配或授予另一个给定用户 13053 但面临此 Oracle 错误 ORA-01427: single-row subquery returns more than one row 并且我确切知道下面显示的 SQL 语句的哪一部分返回此错误但失败处理它,因为我想要实现的是将这些多行返回给 id 为13053 的给定用户。

我的尝试

INSERT INTO userpermissions (
     userid,permissionid
) VALUES (
     13053,( SELECT permissionid
        FROM userpermissions
        WHERE userid = ( SELECT userid
                         FROM users
                         WHERE username = '200376'
                       )
      )
);

有什么帮助吗?

提前致谢。

【问题讨论】:

    标签: oracle11g


    【解决方案1】:

    重写应该可以解决问题:

    INSERT INTO USERPERMISSIONS(
      USERID,
      PERMISSIONID
    )
     SELECT 13053 AS USERID,
            p.PERMISSIONID
       FROM USERPERMISSIONS p
      WHERE p.userid = (SELECT userid FROM users WHERE username = '200376');
    

    原始插入的问题在于,当您真正尝试插入一组行时,您使用的是单行插入语法。

    将目标用户 ID 作为文字包含在内是使行集看起来像我假设您想要的方式的一种方法。

    【讨论】:

    • 感谢您帮助我找到正确的答案。但是,如果将这些权限授予多个用户而不是一个以文字形式表示的单个用户呢?
    • @CCC,你是什么意思?您是想编写一个 SQL 语句,将用户 200376 的 privs 授予一个简短的用户列表(例如 13053、13054 和 13055),还是在尝试更通用的解决方案?
    • 一条 SQL 语句,通过假设此短列表来自另一个表,将用户 200376 的权限授予一个短用户列表(例如 13053、13054 和 13055)。
    猜你喜欢
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多