Q表达式
Q表达式可以处理换行、单引号等特殊字符update t_sys_res_config_sql t
set t.query_sql = q'(long string)'
where t.bm_class_id = 'T_RC_COM_INTERNATE_CONFIG';
UPDATE语句
UPDATE语句可以对查询结果进行update。
要求:
(1)update只能更新from后面的第一张表
(2)连接条件:第一张表与后面表的主键连接。
(3)如果不是主键,需要添加提示bypass_ujvc
update (select /*+ bypass_ujvc*/
p.cuid, p.related_path_cuid, l.cuid path_cuid
from t_logic_port p, t_logic_link l
where p.cuid = l.related_orig_port_cuid)
set related_path_cuid = path_cuid;
技术原理
问题1:为什么可以对select语句执行update和delete操作?
解答:因为对select语句进行update或delete操作时,数据库在后台提供第一张表的rowid。数据库根据rowid可以进行DML操作。
问题2:为什么对select语句执行update和delete操作比一般的update和delete速度快?
解答:因为一般update是在执行时,首先对每行执行查询语句,查询出修改后的值,再去执行需要更新的值。
对select语句执行update时,先把执行结果先查出来,再根据rowid更新指定列的值,这样速度当然比每次更新都查询快。
WITH AS用法
当查询中多次用到某一部分时,可以用Oracle with语句创建一个公共临时表。因为子查询在内存临时表中,避免了重复解析,所以执行效率会提高不少。临时表在一次查询结束自动清除。with
alias_name1 as (subquery1),
alias_name2 as (subQuery2),
……
alias_nameN as (subQueryN)
select col1,col2…… col3
from alias_name1,alias_name2……,alias_nameN