5

配列を受け入れる PLSQL oracle 関数があります。

CREATE OR REPLACE FUNCTION CM.give_me_an_arrays (p_array IN num_array)   
RETURN VARCHAR2
IS 
 x   VARCHAR2 (512);
BEGIN
 x := '';
   FOR i IN 1 .. p_array.COUNT
   LOOP
      DBMS_OUTPUT.put_line (p_array (i));
   END LOOP;

  RETURN x;
END;
/

私はそれをしたい:

select CM.give_me_an_arrays(select COM.COM_ID 
                              from CM.XLP_SE_COMPONENT com  
                             where rownum < 10) 
  from dual

何か案は?前もって感謝します。

4

1 に答える 1

6

配列がSQLオブジェクトである限り、これを行うことができます(11gR2でテストされ、10gで動作するはずです):

SQL> create or replace type num_array is table of number;
  2  /

Type created.

SQL> CREATE OR REPLACE FUNCTION give_me_an_arrays (p_array IN num_array)
  2  RETURN VARCHAR2
  3  IS
  4   x   VARCHAR2 (512);
  5  BEGIN
  6   x := '';
  7     FOR i IN 1 .. p_array.COUNT
  8     LOOP
  9        DBMS_OUTPUT.put_line (p_array (i));
 10     END LOOP;
 11
 12    RETURN x;
 13  END;
 14  /

Function created.

COLLECT集計関数でこの関数を呼び出すことができます。

SQL> SELECT give_me_an_arrays((SELECT cast(collect(rownum) AS num_array) value
  2                              FROM dual
  3                            CONNECT BY level <= 10)) arr
  4    FROM dual;

ARR
--------------------------------------------------------------------------------


1
2
[..]
10

9i (そしておそらく 8i でも、今はテストできません) では、COLLECT は存在しませんでしたが、代わりにMULTISETを使用できました。

SQL> SELECT give_me_an_arrays(cast(MULTISET(SELECT rownum value
  2                                           FROM dual
  3                                         CONNECT BY level <= 10) AS num_array)
  4                          ) arr
  5    FROM dual;

ARR
--------------------------------------------------------------------------------


1
2
[..]
10
于 2012-10-24T15:24:51.773 に答える