在函数中使用表连接数字数组

时间:2015-11-24 13:33:49

标签: arrays oracle plsql

我需要一些数组类型的支持,因为对我来说这是一个新东西,所以

我有一个功能:

create or replace type num_array as table of number;

create or replace function functionname(arr_in num_array) 
return num_array is
tab num_array;
begin
select id_acc bulk collect into tab from (
    SELECT a.id_acc
      FROM (SELECT id_acc, parent_acc FROM account) a
      connect by nocycle prior a.id_acc=a.parent_acc
      start with id_acc in 
      (
        select distinct ID_ACC
        from (SELECT id_acc, parent_acc FROM account 
      ) a
      where parent_acc = id_acc
      connect by nocycle prior a.parent_acc = a.id_acc or parent_acc is null 
      start with id_acc in (select parent_acc from table_name t,account a where t.id=a.id_acc)));

return tab;
end;

作为输入,我想要一个数字数组(id)。我想将该号码(来自输入)与帐户表连接起来。这是一致的:

start with id_acc in (select parent_acc from table_name t,account a where t.id=a.id_acc)));

我想以某种方式加入表格帐户,输入数字, 我试图使用表(tab()),帐户a但我收到了错误。 作为输出我想有选择查询的结果(返回标签)。

2 个答案:

答案 0 :(得分:2)

我不确定我理解你想要达到的目标。只是为了帮助您解决语法问题,请看:

start with id_acc in (select * from table(arr_in));

答案 1 :(得分:0)

下面我提供了一个小片段,它基本上说明了将Nested Table类型与Table连接的问题。

    CREATE OR REPLACE FUNCTION test_ntt_join
      RETURN NUMBER_NTT
    AS
      lv_tab_num NUMBER_NTT;
      lv_tab2 NUMBER_NTT;
    BEGIN
      SELECT LEVEL BULK COLLECT INTO lv_tab_num FROM DUAL CONNECT BY LEVEL < 10;
        SELECT COLUMN_VALUE
        BULK COLLECT INTO 
        lv_tab2
        FROM TABLE(lv_tab_num) t,
          EMP
        WHERE emp.empno= t.column_value;
      RETURN lv_tab2;
    END;


------------------------------------------OUTPUT------------------------------------
select * from table(test_ntt_join);

COLUMN_VALUE
1
1
3

------------------------------------------OUTPUT------------------------------------