`
elvis4139
  • 浏览: 149983 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ORA-01427 单行子查询返回多个行 解决方法

阅读更多
数据库分级结构中,删除叶子节点后需要将其父节点的的状态重新判断是否为叶子节点。根据ORACLE语句可直接查询出所几点是否为叶子节点,SQL语句如下:
SELECT s_entity_code,
NVL((SELECT '0'
  FROM am_sys_entity_code B
  WHERE I.s_entity_code=B.s_parent_code
  AND ROWNUM  < 2),'1') S_MARK_TAIL
  FROM am_sys_entity_code I
 START WITH s_parent_code = '0'
CONNECT BY s_parent_code = PRIOR s_entity_code;


使用update将节点状态更新到S_MARK_TAIL字段:
UPDATE am_sys_entity_code SET S_MARK_TAIL = (SELECT 
NVL((SELECT '0'
  FROM am_sys_entity_code B
  WHERE I.s_entity_code=B.s_parent_code
  AND ROWNUM  < 2),'1') S_MARK_TAIL
  FROM am_sys_entity_code I
 START WITH s_parent_code = '0'
CONNECT BY s_parent_code = PRIOR s_entity_code);


数据库报错:ORA-01427 单行子查询返回多个行。

解决办法为,在update语句中在嵌套一层select查询,并关联主键s_entity_code字段。SQL如下:
UPDATE am_sys_entity_code t1 SET t1.s_mark_tail = (
       select t2.s_mark_tail from (
              SELECT s_entity_code,
                NVL((SELECT '0'
                  FROM am_sys_entity_code B
                  WHERE I.s_entity_code=B.s_parent_code
                  AND ROWNUM  < 2),'1') S_MARK_TAIL
                  FROM am_sys_entity_code I
                 START WITH s_parent_code = '0'
                CONNECT BY s_parent_code = PRIOR s_entity_code
       ) t2 where t2.s_entity_code = t1.s_entity_code
);
分享到:
评论

相关推荐

    SQL:第六章_子查询.ppt

    然而,一个常见的错误是使用返回多行结果的子查询与单行比较运算符配合,这会导致 ORA-01427 错误。正确做法是使用 IN, ANY 或 ALL 运算符与多行子查询配合,确保与主查询的比较操作符合预期。 总的来说,熟练掌握...

    oracle子查询教程(ppt )

    执行单行子查询时,确保子查询的结果只有一行,否则会引发错误,如示例中的 `ORA-01427: single-row subquery returns more than one row`。同时,子查询中不应包含`ORDER BY`子句,因为这会影响结果的顺序,而子...

    数据库oracle 认证 pdf

    3. **多表查询**:在实际业务环境中,数据往往分布在多个表中。学习如何通过JOIN操作(如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN)来合并来自不同表的数据,是Oracle数据库管理的重要部分。 4. **子查询**:...

    oracle\Oracle从入门到精通

    - 子查询可以出现在WHERE子句中,也可以作为FROM子句的一部分。 - **2.0 替换变量** - 使用`&`和`&&`符号创建和引用替换变量。 - 替换变量使得SQLPLUS能够接收用户的输入并将其用于查询中。 - **2.1 环境变量**...

    oralce 从入门到精通

    - **单行子查询**: 返回一行数据的子查询。 - **多行子查询**: 返回多行数据的子查询。 **2.0 替换变量** - **&**: 单次替换变量。 - **&&**: 多次替换变量。 **2.1 环境变量** - 系统环境变量可以影响SQL的执行...

    Oracle数据库学习日记-实用性最强的Oracle学习总结.docx

    - 单行子查询的结果只有一行。 - 示例:`SELECT * FROM MY_TABLE WHERE ID = (SELECT MIN(ID) FROM MY_TABLE);` ##### 8.2 多行子查询 - 多行子查询的结果有多行。 - 示例:`SELECT * FROM MY_TABLE WHERE NAME ...

    oracle_day01教案1

    Oracle数据库的使用涉及多个层面,包括安装配置、连接、数据管理、查询优化等。以下是对"Oracle_day01教案1"内容的详细解释: 1. **Oracle简介**: - Oracle数据库由 Larry Ellison 和他的伙伴于1977年创立,旨在...

    oracl培训文件

    - 单行子查询:`SELECT * FROM emp WHERE sal &gt; (SELECT AVG(sal) FROM emp);` - 多行子查询:`SELECT * FROM emp a WHERE sal &gt; (SELECT AVG(sal) FROM emp WHERE deptno = a.deptno);` **2. 嵌套查询** - **...

    oracle入门经典

    - **相关子查询**: 外层查询的每行都需要执行内层查询。 **1.20 替换变量** - **&**: 单个会话变量。 - **&&**: 会话变量,允许多次使用同一个变量。 **1.21 环境变量** - **环境变量**: 设置Oracle客户端的环境...

    Oracle数据库学习日记

    - **单行子查询**: 返回单个值。 - 示例: `select * from employees where salary &gt; (select avg(salary) from employees);` ##### 8.2 多行子查询 - **多行子查询**: 返回多个值。 - 示例: `select * from ...

    Oracle 参考帮助手册

    4. **子查询**:讲解如何在查询中嵌套SQL语句,实现更复杂的逻辑,如单行子查询、多行子查询和集合比较子查询。 5. **连接操作**:涵盖了内连接(INNER JOIN)、外连接(LEFT JOIN, RIGHT JOIN, FULL JOIN)和自...

    Oracle数据库PPT和课堂笔记

    本章会讲解不同类型的子查询,如标量子查询、行子查询、集合子查询,以及如何在WHERE和FROM子句中使用它们。 8. **第11章 数据操作与事务控制**:这部分内容将涵盖INSERT、UPDATE和DELETE语句用于数据的插入、修改...

Global site tag (gtag.js) - Google Analytics