Oracle update的一种用法

用于大数据量的更新,效率比较高,括号内的select语句为虚拟表,要求where字段必须是主键或唯一索引(b.customer_id和a.customer_id)。记录一下,以后用得上。

例子:
update (select a.city_name, b.city_name as new_name
          from customers a, tmp_cust_city b
         where b.customer_id = a.customer_id)
   set city_name = new_name;

用了那么多年ORACLE,居然还不知道这种方法,惭愧。

 

### Oracle UPDATE语句的使用方法 #### 基本语法 在Oracle数据库中,`UPDATE`语句用于修改表中的现有记录。基本语法如下: ```sql UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; ``` 此命令会根据`WHERE`子句指定的条件更新符合条件的所有行。 #### 单列更新示例 当只需要更改单一列的数据时,可以直接设置该列的新值并加上必要的过滤条件[^1]。 ```sql -- 将部门ID为10的所有员工工资提高10% UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; ``` #### 多列同时更新 如果需要一次性改变多列的内容,则可以在`SET`后面列出所有的赋值表达式,用逗号分隔开各个待改写的字段及其新值[^4]。 ```sql -- 同时更新供应商名称和地址 UPDATE suppliers SET supplier_name = 'New Supplier Name', supplier_address = 'New Address' WHERE supplier_id = 5; ``` #### 关联两表进行更新 对于涉及两个表格之间的联合查询来进行数据更新的情况,在Oracle里可以通过嵌套子查询的方式实现。这里给出一种常见的做法——利用内连接(inner join)完成跨表更新操作[^3]。 ```sql -- 更新订单状态基于客户信用等级 UPDATE orders o SET status = CASE WHEN c.credit_rating >= 7 THEN 'APPROVED' ELSE 'PENDING' END FROM customers c WHERE o.customer_id = c.id AND o.status IN ('NEW', 'REVIEW'); ``` 需要注意的是上述SQL并非标准ANSI SQL而是某些特定版本下的变体;对于严格遵循ANSI标准的产品可能不适用这种写法。此时应考虑采用其他替代方案如MERGE INTO等。 #### 性能优化技巧 为了提升大批量更新作业的速度,可以充分利用Oracle特有的功能特性比如快速游标(`FORALL`)配合集合处理机制以及借助ROWID伪列加快定位速度等方式来达到目的[^5]。 ```sql BEGIN FOR rec IN (SELECT rowid rid FROM large_table WHERE some_column IS NULL) LOOP -- 批量更新null值所在行 EXECUTE IMMEDIATE 'UPDATE large_table SET some_column=''default'' WHERE ROWID=:rid' USING rec.rid; END LOOP; END; / ``` 以上就是有关于Oracle `UPDATE`指令的一些常见应用场景及其实现方式的例子说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值