使用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. ros console_bridge找不到

    Could not find a package configuration file provided by "console_bridge" with any of the f ...

  2. C语言cJSON库的使用,解析json数据格式

    C语言cJSON库的使用,解析json数据格式 摘自:https://www.cnblogs.com/piaoyang/p/9274925.html 对于c语言来说是没有字典这样的结构的,所以对于解析 ...

  3. Oracle——约束

    NOT NULLUNIQUE PRIMARY KEYFOREIGN KEYCHECK 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名 --指定约束名 CREA ...

  4. Ubuntu14.04下使用PPA安装php5.6,php7

    1.为了使用ppa(Personal Package Archives) 选安装依赖: # apt-get install python-software-properties 2.添加不同版本php ...

  5. jQuary总结4: jquery操作字符串

    1 jquery操作DOM -1 创建元素 $('<span>这是一个span元素</span>'); //创建了一个jQuery包装的span,此时并没有添加到DOM树上 - ...

  6. WSAStartup函数

    函数WSAStartup 一.WSAStartup函数                 int WSAStartup                       (                   ...

  7. PyCharm可用Active Code分享

    目前可用,不保证更新!请及时取用. 6YQUPH9R7H-eyJsaWNlbnNlSWQiOiI2WVFVUEg5UjdIIiwibGljZW5zZWVOYW1lIjoi5o6I5p2D5Luj55C ...

  8. [修正] Firemonkey 中英文混排折行,省略字符,首字避开标点

    问题:FMX 在移动平台的文字显示并非由该平台的原生 API 来显示,而是由 FMX.TextLayout.GPU 来处理,也许是官方没留意到中文字符的问题,造成在中英文混排折行时,有些问题. 修正: ...

  9. Shapefile点图层转换为Shapefile线图层

    在Oracle数据表转换为Shapefile(一)和Oracle数据表转换为Shapefile(二)两篇文章中,分别介绍了两种不同的根据Oracle数据表生成Shapefile点图层的方法.本文在此基 ...

  10. duilib入门简明教程 -- 界面布局(9)

        上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayou ...