gpt4 book ai didi

oracle - 将 select 语句传递给 Oracle PLSQL

转载 作者:行者123 更新时间:2023-12-02 20:47:28 28 4
gpt4 key购买 nike

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

关于oracle - 将 select 语句传递给 Oracle PLSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051409/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com