Oracle: Return multiple values in a function

前端 未结 3 906
长情又很酷
长情又很酷 2021-02-10 17:06

I\'m trying to return a multiple values in a %rowtype from a function using two table(employees and departments), but it not working for me.

create or replace fu         


        
3条回答
  •  别跟我提以往
    2021-02-10 17:45

    create type t_row as object (a varchar2(10));
    
    create type t_row_tab as table of t_row;
    

    We will now create a function which will split the input string.

    create or replace function get_number(pv_no_list in varchar2) return t_row_tab is
    lv_no_list t_row_tab := t_row_tab();
    begin
    
      for i in (SELECT distinct REGEXP_SUBSTR(pv_no_list, '[^,]+', 1, LEVEL) no_list FROM dual
      CONNECT BY REGEXP_SUBSTR(pv_no_list, '[^,]+', 1, LEVEL) IS NOT NULL)
      loop
      lv_no_list.extend;
      lv_no_list(lv_no_list.last) := t_row(i.no_list);
      end loop;
    
      return lv_no_list;
    
    end get_number;
    

    Once the function is in place we can use the table clause of sql statement to get the desired result. As desired we got multiple values returned from the function.

    SQL> select * from table(get_number('1,2,3,4'));
    
    
    A
    ----------
    1
    3
    2
    4
    

    So now our function is simply behaving like a table. There can be a situation where you want these comma separated values to be a part of "IN" clause.

    For example :

    select * from dummy_table where dummy_column in ('1,2,3,4');
    

    But the above query will not work as '1,2,3,4' is a string and not individual numbers. To solve this problem you can simply use following query.

    select * from dummy_table where dummy_column in ( select * from table(get_number('1,2,3,4')) );
    

    References : http://www.oraclebin.com/2012/12/returning-multiple-values-from-function.html

提交回复
热议问题