oracle - 如何从表参数中选择行到游标中
问题描述
我想将一个表参数传递给一个 Oracle 存储过程并返回一个带有表值和一些额外数据的游标,即
CREATE OR REPLACE PACKAGE EVENTPACKAGE AS
TYPE T_STRING_TAB IS TABLE OF VARCHAR2(260) INDEX BY BINARY_INTEGER;
END;
create or replace
procedure spTest(eventids in EVENTPACKAGE.T_STRING_TAB, p_cursor in out sys_refcursor)
as
begin
open p_cursor for
select * from
(
select *, 'test1', 'test2' from eventids
);
end;
因此,如果eventids
包含名为“First”、“Second”和“Third”的 3 个字符串,则该过程将返回:
"First", "test1", "test2"
"Second", "test1", "test2"
"Third", "test1", "test2"
该参数是一个表格,为什么这不起作用?
解决方案
几个问题:
- 如果您还想返回其他表达式,则需要为内部 * 起别名
- 要从 PL/SQL 数组中进行选择,您需要使用 table() 运算符
这使:
var cur refcursor;
create or replace package eventpackage as
type t_string_tab is table of varchar2(20)
index by pls_integer;
string_tab t_string_tab;
end;
/
begin
eventpackage.string_tab(1) := 'First';
eventpackage.string_tab(2) := 'Second';
eventpackage.string_tab(3) := 'Third';
open :cur for
select * from (
select t.*, 'test1', 'test2'
from table (
eventpackage.string_tab
) t
);
end;
/
print :cur;
Result Sequence 'TEST 'TEST
-------------------- ----- -----
First test1 test2
Second test1 test2
Third test1 test2
推荐阅读
- objective-c - 我将如何在 Swift 中实现这个 Objective-C 行?
- c - SocketCAN 从套接字读取只返回 11cobid
- java - 关联类的 JsonInclude 注释
- .net - Restful API 在一个 HTTP 请求中发布文件和元数据
- android - 在调试器中启动应用程序时 Android 设备重置
- sql-server - 恢复一个 1.2GB 的 bak 文件,但数据库大小没有那么大
- powershell - 如何使用 Powershell 命令 Set-Service SwitchAccount 将 Windows 帐户更改为本地系统帐户
- c# - C# Castle Windsor 使用工厂时不注入 NLog 实例
- python - 为什么用不同的 __init__ 代码继承相同的类?盈透证券 API
- ios - 如何设置快速编译器版本?