ORACLE的WITH语句的一个疑惑
使用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语句的一个疑惑的更多相关文章
- oracle 实现多字段匹配一个关键字查询语句
oracle 实现多字段匹配一个关键字查询语句:有两种方法(经测试,10g中不能用,11g才行): 第一种. select * from table where ('字段名1' ||'字段名2' || ...
- 将oracle冷备份恢复到另外一个数据库实例中
因更换服务器需要将Oracle数据库转移到另外台Oracle中.说明: 1.测试环境为:windows server2003 和 oracle 10g. 2.2台服务器安装的程序目录一样,数据目录不一 ...
- Oracle的update语句优化研究
最近研究sql优化,以下文章转自互联网: 1. 语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation s ...
- 【转】Oracle 执行动态语句
1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...
- oracle常用SQL语句(汇总版)
Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...
- oracle之sql语句优化
oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...
- 各种oracle参数查询语句
各种oracle参数查询语句 1.show parameter:--显示各个系统参数配置 2.select * from v$parameter;--显示各个系统参数配置 2.show paramet ...
- oracle中sql语句的优化
oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info (30000条数据)D ...
- mysql与oracle在groupby语句上的细节差异
前言 之所以去纠那么细节的问题,是因为之前有过一个这样的场景: 有个同学,给了一条数据库的语句给我,问,为啥这样子的语句在oracle语句下执行不了. select * from xx where x ...
随机推荐
- [C++] the pointer array & the array's pointer
int *p[4]------p是一个指针数组,每一个指向一个int型的int (*q)[4]---------q是一个指针,指向int[4]的数组 --> type: int(*)[4] vo ...
- Python手机开发调用DLL实现部分ADB功能-乾颐堂
近期学了一点Python,然后正好有一个手机同步工具方面的预研工作要完成. 要实现PC与手机的通信,首先要找到他们的通信协议,还好的是Android有完善的协议:ADB ADB的代码是开源的,而且支持 ...
- revert
git revert是用一次新的commit来回滚之前的commit
- OpenCV4Android安装
转:http://blog.csdn.net/gao_chun/article/details/49359535 1.下载及目录介绍 2.将 OpenCV引入 Android Studio 3.更新 ...
- Class Loading Deadlocks
By tomas.nilsson on Feb 28, 2010 Mattis keeps going strong, in this installment you get to learn eve ...
- 字节序(Endian),大端(Big-Endian),小端(Little-Endian)
http://www.cppblog.com/tx7do/archive/2009/01/06/71276.html 在各种计算机体系结构中,对于字节.字等的存储机制有所不同,因而引发了计算机通信领域 ...
- C#中的异步调用及异步设计模式(三)——基于事件的异步模式
四.基于事件的异步模式(设计层面) 基于事件的C#异步编程模式是比IAsyncResult模式更高级的一种异步编程模式,也被用在更多的场合.该异步模式具有以下优点: · ...
- jmeter-性能监控(InfluxDB+Grafana)
测试结果实时监控:jmeter+influxdb+grafana InfluxDB:存储实时数据的DB Grafana:DB中存储的实时数据可以在浏览器查看 --------------------- ...
- [LeetCode 题解]: Interger to Roman
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given an i ...
- Verilog MIPS32 CPU(三)-- ALU
Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...