加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

将select语句传递给Oracle PLSQL

发布时间:2021-03-05 22:44:11 所属栏目:站长百科 来源:网络整理
导读:我有一个接受数组的PLSQL oracle函数: CREATE OR REPLACE FUNCTION CM.give_me_an_arrays (p_array IN num_array) RETURN VARCHAR2IS x VARCHAR2 (512);BEGIN x := ''; FOR i IN 1 .. p_array.COUNT LOOP DBMS_OUTPUT.put_line (p_array (i)); END LOOP; RE

我有一个接受数组的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

有任何想法吗?
提前致谢.

解决方法

你可以这样做,只要数组是一个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

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读