如何从表参数选择行到游标

时间:2019-08-15 15:16:17

标签: 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包含3个称为“第一”,“第二”和“第三”的字符串,则过程将返回:

"First", "test1", "test2"
"Second", "test1", "test2"
"Third", "test1", "test2"

该参数是一个表,所以为什么不起作用?

1 个答案:

答案 0 :(得分:0)

几个问题:

  • 如果您还想返回其他表达式,则需要给内部*加上别名
  • 要从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