database - 更新游标中的多行
问题描述
我正在尝试一步一步地处理这个程序。就像在下面的代码中一样,我想在使用光标更新表库存后打印旧价格并打印新价格。
使用游标更新多行数据,创建一个接受数字的过程,该数字代表价格上涨的百分比。该过程将显示旧价格、新价格,并使用新价格更新数据库。
CREATE OR REPLACE PROCEDURE p5
AS
CURSOR invent_cur IS
SELECT inv_price
FROM inventory;
v_inv_price inventory.inv_price%TYPE;
BEGIN
OPEN invent_cur;
LOOP
FETCH invent_cur INTO v_inv_price;
EXIT WHEN invent_cur%NOTFOUND;
IF (v_inv_price <= 0)
THEN
UPDATE inventory
set inv_price = inv_price*10;
DBMS_OUTPUT.PUT_LINE(v_inv_price);
END IF;
END LOOP;
CLOSE invent_cur;
END;
/
解决方案
只需围绕您的更新声明尝试一下:
CREATE OR REPLACE PROCEDURE p5 (in_pc IN number)
AS
CURSOR invent_cur IS
SELECT inv_price
FROM inventory
WHERE inv_price > 0
FOR UPDATE;
v_inv_price inventory.inv_price%TYPE;
BEGIN
OPEN invent_cur;
LOOP
FETCH invent_cur INTO v_inv_price;
EXIT WHEN invent_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('before: '||v_inv_price);
v_inv_price := v_inv_price * in_pc ;
UPDATE inventory
set inv_price = v_inv_price
WHERE CURRENT OF invent_cur;
DBMS_OUTPUT.PUT_LINE('after: '||v_inv_price);
END LOOP;
为了执行:
SET serveroutput ON
exec p5(10);
commit; -- to save the changes
推荐阅读
- android - 通过类 WebView 加载 URL 时出错
- continuous-integration - 存储库的浅获取
- javascript - 我的链式 POST 和 GET axios 调用变慢是很自然的吗?
- c# - 如何在 C# 中设置打印机以继续打印下一页?
- java - MapReduce 任务立即从 0% 跳到 100% 没有输出
- android-studio - 无法解析“...”的依赖关系:无法解析项目:react-native-navigation
- ruby-on-rails - Rails 生产中的 AngularJS 模板不可用
- vue.js - vue/cli3.0时使用DllPlugin和DllReferencePlugin错误
- html - 如何使用 boostrap 以水平方式显示游戏列表?
- delphi - Delphi:如何在cmd命令中将变量作为参数