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 ...
随机推荐
- web桌面
http://www.pengyaou.com/LegendsZ/eg/WebWindowSystem/
- mosquitto ---配置SSL/TLS linux
mosquitto ---配置SSL/TLS 摘自: https://www.cnblogs.com/saryli/p/9821343.html 在服务器电脑上面创建myCA文件夹, 如在/home/ ...
- Ubuntu 安装phpmyadmin 和配置
ubuntu 安装 phpmyadmin 两种 : 1: apt-get 安装 然后使用 已有的虚拟主机目录建立软连接 sudo apt-get install phpmyadmin sud ...
- configparser模块读写ini配置文件
在自动化测试过程中,为了提高脚本的可读性和降低维护成本,将一些通用信息写入配置文件,将重复使用的方法写成公共模块进行封装,使用时候直接调用即可. 这篇博客,介绍下python中利用configpars ...
- linux 安装php7
http://blog.csdn.net/whatday/article/details/50645117 1: wget http://cn2.php.NET/distributions/php- ...
- modelsim使用常见问题及解决办法集锦③
四.You selected Modelsim-Altera as Simulation Software in EDA Tool Settings,however…… You selected Mo ...
- C++/Java中继承关系引发的调用关系详解
C++: 这里引用到了 http://blog.csdn.net/haoel/article/details/1948051/ 中的内容,还请提前阅读陈大神的这篇博客后在阅读本篇. 覆盖,实现多态的基 ...
- ASP.NET mvc4 Controllder 同步还是异步
从抽象类Controller 的定义可以看出他 同时实现了 IAsyncController, IController public abstract class Controller : Contr ...
- 20145233《网络对抗》Exp8 Web基础
20145233<网络对抗>Exp8 Web基础 实验问题思考 什么是表单? 表单在网页中主要负责数据采集功能 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框.隐藏域 ...
- c#设计模式系列:命令模式(Command Pattern)
引言 命令模式,我感觉"命令"就是任务,执行了命令就完成了一个任务.或者说,命令是任务,我们再从这个名字上并不知道命令的发出者和接受者分别是谁,为什么呢?因为我们并不关心他们是谁, ...