oracle - 如何在 oracle 中更新 ref 游标值?
问题描述
我想获取有限的号码。的行数使用refcursor
. 那么我需要更新同一组记录。可能吗?
create or replace PROCEDURE myproc (
P_ROWCOUNT IN NUMBER,
OUT_TXN_IDS OUT OF_CR_TYPE,
P_CD_ERROR OUT NUMBER,
P_DS_ERROR OUT VARCHAR2
)
AS
V_TXNID NUMBER;
BEGIN
P_CD_ERROR := 0;
P_DS_ERROR := 'SUCCESS';
OPEN OUT_TXN_IDS for
SELECT id FROM table1 WHERE status='N' AND ROWNUM<=P_ROWCOUNT;
EXCEPTION
WHEN OTHERS THEN
P_CD_ERROR := sqlcode;
P_DS_ERROR := 'WF-ERROR - myproc - ' || substr(SQLERRM, 1, 200);
RETURN;
END myproc;
refcursor
返回后我需要将相同的记录更新为状态 Y。我们可以这样做吗?请建议
解决方案
我没有你的表格也没有数据,所以我稍微简化了一点,但是 - 它仍然可以工作。
初始状态:
SQL> SELECT status, count(*) FROM table1 group by status;
S COUNT(*)
- ----------
Y 7
N 7
过程:基本上,您将修改ID
由 ref 游标返回的行。
SQL> DECLARE
2 out_txn_ids SYS_REFCURSOR;
3 p_rowcount NUMBER := 5;
4 l_id table1.id%TYPE;
5 BEGIN
6 OPEN out_txn_ids FOR SELECT id
7 FROM table1
8 WHERE status = 'N'
9 AND ROWNUM <= p_rowcount;
10
11 LOOP
12 FETCH out_txn_ids INTO l_id;
13
14 EXIT WHEN out_txn_ids%NOTFOUND;
15
16 UPDATE table1
17 SET status = 'Y'
18 WHERE id = l_id;
19 END LOOP;
20
21 CLOSE out_txn_ids;
22 END;
23 /
PL/SQL procedure successfully completed.
结果:
SQL> SELECT status, count(*) FROM table1 group by status;
S COUNT(*)
- ----------
Y 12
N 2
SQL>
推荐阅读
- python - (Errno 2:找不到文件)在谷歌云部署时的 python 烧瓶
- javascript - Google Timezone api 无效的时间戳参数
- angular - Angular 服务提供在:从库导入的根引发 NullInjectorError
- azure - Azure CLI 作为打开 SSH 的基础映像
- flutter - 如何将新图标添加到从 fluttericon.com 生成的现有 AppIcons 类
- python - 使用 Python 将 Blob 从一个存储帐户复制到另一个存储帐户
- html - 通过单击图标向表中添加新行
- javascript - Selenium Node JS,无法使用xpath点击特定元素
- python - 如何 value_count 只选择行?[熊猫]
- javascript - 如果响应不透明,如何从 url 获取数据。模式:“no-cors”没有显示任何效果