oracle - 如何从 %ROWTYPE 表中选择数据到 refcursor?
问题描述
declare
cursor cur0 is Select no, date from data123;
TYPE TempTabTyp0 is table of cur0%ROWTYPE index by pls_integer;
temp_tab0 TempTabTyp0;
lrc sys_refcursor;
BEGIN
open cur0;
fetch cur0 bulk collect into temp_tab0;
close cur0;
for rec in 1 .. temp_tab0.count loop
temp_tab0(rec).no := 'new value' || temp_tab0(rec).no;
end loop;
open lrc for select * from table(temp_tab0);
END;
如何将数据从 temp_tab0 发送到 sys_refcursor(或其他游标)?
解决方案
只需将您的代码包装在一个包中。像这样的东西:
create table data123 (no, dt) as
select cast ('abc' as varchar2 (30)), date'2020-09-20' from dual
/
create or replace package pack1 as
cursor cur0 is select no, dt from data123;
type TempTabTyp0 is table of cur0%rowtype index by pls_integer;
procedure getcur (rc out sys_refcursor);
end;
/
create or replace package body pack1 as
procedure getcur (rc out sys_refcursor) is
temp_tab0 TempTabTyp0;
begin
open cur0;
fetch cur0 bulk collect into temp_tab0;
close cur0;
for i in 1..temp_tab0.count loop
temp_tab0(i).no := 'new value '||temp_tab0(i).no;
end loop;
open rc for select * from table (temp_tab0);
end;
end;
/
执行和结果:
var rc refcursor
exec pack1.getcur (:rc)
ATTR_1 ATTR_2
------------------------------ -------------------
new value abc 2020-09-20 00:00:00
PS 对于不正确的输出标题,请参阅此主题。
推荐阅读
- flutter - flutter:: 有没有一个flutter包可以让我直观地看到我的音量?
- android - 使用 Visual Studio Code 作为移动开发 IDE,通过安装 Android 命令工具
- android - 在 Kotlin 中更改 TextView 的文本时出错 - Android
- java - 如何在 twitter4j 中将 twitter ID 转换为用户名?或者我可以使用 id 来获取用户简介吗?
- javascript - 使用 Server-Sent Event 获取在线用户
- c# - 如何创建新列表
基于另外两个列表 并考虑重复? - spring - 如何配置 Spring 的 Rabbit 模板以在超时时抛出异常
- python - 在不让我输入的情况下跳出循环
- android - datastore.first() , .last() , .map() 等方法在 Android Studio 的所有项目中都丢失/未解决的引用错误,idk 为什么它们消失了
- themes - 激活新主题后出现 Opencart 3.0.3.8 错误