使用WITH语句,更新表数据,不行:

WITH VN AS (
SELECT T.ID, T.NODE_ID, N.NODE_TYPE, N.NODE_NAME, T.NODE_LEVEL, T.RN FROM
(
SELECT ID, NODE_ID, LEVEL NODE_LEVEL, ROWNUM RN
FROM ORG_NODE_TREE
START WITH PARENT_ID IS NULL
CONNECT BY PRIOR NODE_ID=PARENT_ID
) T
LEFT JOIN ORG_NODE N ON N.ID=T.NODE_ID
ORDER BY T.RN
)
UPDATE ORG_NODE N
SET N.NODE_TYPE='STATION'
WHERE N.ID IN
(
SELECT NODE_ID FROM VN
WHERE NODE_LEVEL=1
)

报以下错误:

[Err] ORA-: SQL command not properly ended

不使用WITH,可以:

WITH VN AS (
SELECT T.ID, T.NODE_ID, N.NODE_TYPE, N.NODE_NAME, T.NODE_LEVEL, T.RN FROM
(
SELECT ID, NODE_ID, LEVEL NODE_LEVEL, ROWNUM RN
FROM ORG_NODE_TREE
START WITH PARENT_ID IS NULL
CONNECT BY PRIOR NODE_ID=PARENT_ID
) T
LEFT JOIN ORG_NODE N ON N.ID=T.NODE_ID
ORDER BY T.RN
) UPDATE ORG_NODE N
SET N.NODE_TYPE='STATION'
WHERE N.ID IN
(
SELECT NODE_ID FROM
(
SELECT T.ID, T.NODE_ID, N.NODE_TYPE, N.NODE_NAME, T.NODE_LEVEL, T.RN FROM
(
SELECT ID, NODE_ID, LEVEL NODE_LEVEL, ROWNUM RN
FROM ORG_NODE_TREE
START WITH PARENT_ID IS NULL
CONNECT BY PRIOR NODE_ID=PARENT_ID
) T
LEFT JOIN ORG_NODE N ON N.ID=T.NODE_ID
ORDER BY T.RN
)
WHERE NODE_LEVEL=
)

如果把WITH后面换成SELECT,一点问题没有,但UPDATE就是报错,好奇怪,难道WITH这种间接地写法不能用于UPDATA。

一种说法是:“with必须紧跟引用的select语句,而不是delete,update,merge等”

http://www.itpub.net/thread-1585644-1-1.html

提到可以用MERGE:

--wkc168 发表于 2012-3-2 13:28
merge into c using (select * from b) a on(c.g=a.h)
when matched then
update set c.e=a.f

http://stackoverflow.com/questions/5380559/update-statement-using-with-clause

ORACLE的WITH语句的一个疑惑的更多相关文章

  1. oracle 实现多字段匹配一个关键字查询语句

    oracle 实现多字段匹配一个关键字查询语句:有两种方法(经测试,10g中不能用,11g才行): 第一种. select * from table where ('字段名1' ||'字段名2' || ...

  2. 将oracle冷备份恢复到另外一个数据库实例中

    因更换服务器需要将Oracle数据库转移到另外台Oracle中.说明: 1.测试环境为:windows server2003 和 oracle 10g. 2.2台服务器安装的程序目录一样,数据目录不一 ...

  3. Oracle的update语句优化研究

    最近研究sql优化,以下文章转自互联网: 1.     语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation s ...

  4. 【转】Oracle 执行动态语句

    1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...

  5. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  6. oracle之sql语句优化

    oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...

  7. 各种oracle参数查询语句

    各种oracle参数查询语句 1.show parameter:--显示各个系统参数配置 2.select * from v$parameter;--显示各个系统参数配置 2.show paramet ...

  8. oracle中sql语句的优化

    oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info   (30000条数据)D ...

  9. mysql与oracle在groupby语句上的细节差异

    前言 之所以去纠那么细节的问题,是因为之前有过一个这样的场景: 有个同学,给了一条数据库的语句给我,问,为啥这样子的语句在oracle语句下执行不了. select * from xx where x ...

随机推荐

  1. tp5 whereOr

    题目:查询grade=1 or class=2 or sex=3的学生 $condition[; $condition[; $condition[; $list =Db::name($this-> ...

  2. 使用DBMS_SCHEDULER包管理计划任务

    Dbms_scheduler是Oracle提供创建计划任务的包,任务类型可以是执行PL\SQL程序.执行外部脚本.调用操作系统命令,通常用于创建定期定时的任务,不依赖操作系统,保存在数据库内,数据库迁 ...

  3. javascript总结26:Date

    1 获取Date对象 Date-引用类型,JavaScript中的内置对象 获取当前时间 var date = new Date(); //UTC的时间 //返回数字,时间的毫秒形式 var date ...

  4. 引用数据数据类型Scanner、Random

    键盘录入Scanner 获取键盘录入的数据,对获取数据的具体操作进行了封装,只需要调用方法,即可得到键盘录入的数据 A:导包            import java.util.Scanner;  ...

  5. Python3常见Exception

    异常                                     描述BaseException                    新的所有异常类的基类Exception        ...

  6. Redis缓存相关

    Redis缓存服务搭建及实现数据读写 RedisHelper帮助类 /// <summary> /// Redis 帮助类文件 /// </summary> public cl ...

  7. ssh关于含有外键的传值中无法识别正确的action的原因和解决办法

    在含有外键的表中,要保存一个值到这个外键时:逻辑思路:需要先将jsp页面的值传到相应的action中,在这个action中需要引入这个外键的实体层和DAO层(DAO层只需set方法),在执行函数中对于 ...

  8. VC++下的Unicode编程

    ASCII是用来表示英文字符的一种编码规范.每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H—FFH). 其实,英文字符并没有那么多,一般只用前128个(00H ...

  9. ORM,Entity Framework介绍以及其所包含的基础架构介绍

    一:entity framework 6.0 ORM (实体关系模型) O: Domain Object 领域模型 R: Relational Database 关系型数据库 M: Mapping 映 ...

  10. Arduino I2C + 温湿度传感器AM2321

    (2015.5.17:本日志的内容有所更新,参见<使用Arduino Wire Library读取温湿度传感器AM2321>.) AM2321是广州奥松电子生产的数字式温湿度传感器.虽是国 ...