利用returning 返回dml语言的值

利用returning bulk collect into获取delete,insert,update等操作的返回集,再通过返回集做其它的操作,可以有效节省系统资源。

示例如下:

declare
TYPE NumList is TABLE OF char(24);
tmptable NumList;
begin
delete tbl where id< 200 returning (drug_id:这个是要显示表中字段) BULK
COLLECT INTO tmptable;
DBMS_OUTPUT.PUT_LINE('Deleted ' || SQL%ROWCOUNT || ' rows:');
FOR i IN 1 .. tmptable.count LOOP
DBMS_OUTPUT.PUT_LINE('id:' || tmptable(i));
END LOOP;
end;

### DML RETURNING INTO 语句详解 #### 单行操作示例 对于单行的操作,`RETURNING INTO` 子句可以直接返回受影响的列。下面是一个简单的例子,在 `UPDATE` 操作完成后立即获取被修改记录的新旧: ```plsql DECLARE v_old_value VARCHAR2(10); v_new_value VARCHAR2(10); BEGIN UPDATE employees SET salary = salary * 1.1 WHERE employee_id = 100 RETURNING first_name, last_name, old(salary), new(salary) INTO :v_old_value, :v_new_value; END; / ``` 此代码片段展示了如何通过 `RETURNING INTO` 获取更新前后的特定字段[^2]。 #### 多行操作处理 当涉及到多行时,则需要声明集合类型的变量来存储结果集中的每一项。例如,如果要批量删除某些员工并收集其ID列表作为反馈信息: ```plsql DECLARE TYPE t_ids IS TABLE OF NUMBER INDEX BY PLS_INTEGER; l_deleted_ids t_ids; BEGIN DELETE FROM employees WHERE department_id IN (SELECT deptno FROM departments WHERE location = 'New York') RETURNING employee_id BULK COLLECT INTO l_deleted_ids; FOR i IN l_deleted_ids.FIRST .. l_deleted_ids.LAST LOOP DBMS_OUTPUT.PUT_LINE('Deleted Employee ID:' || TO_CHAR(l_deleted_ids(i))); END LOOP; END; / ``` 这段脚本说明了怎样利用数组结构保存由 `DELETE ... RETURNING` 返回的结果,并遍历打印出来[^5]。 需要注意的是,针对不同数据库产品可能存在细微差别。比如 PostgreSQL 支持更灵活的方式来进行此类操作;而 KunlunBase 对 MySQL 的扩展也提供了类似的特性但是存在一些局限性,如无法直接使用 `VALUES()` 函数而是采用 `EXCLUDED` 表达式替代[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值