我在Oracle中使用数组参数制作了一个过程:
create or replace PACKAGE my_pkg AS
TYPE USER_ID_TYPE IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
create or replace procedure my_proc (my_id varchar2, ids USER_ID_TYPE)
is
xxxx xxxx xxxx ....
end;
我想在 sqldeveloper 中测试它。
我该怎么做?
我尝试过这样的:
exec('1010', ('111', '222')) -> fail
exec('1010', ['111', '222']) -> fail
exec('1010' ARRAY('111', '222')) -> fail
我只想将 sqldeveloper 中的过程与数组一起使用。
最佳答案
在最近发布的 Oracle 数据库 18.1 版本中(可在 livesql.oracle.com 以及 Oracle Cloud 上免费探索),您可以使用限定表达式来执行您想要的操作:构造一个关联表达式过程调用中的“动态”数组:
CREATE OR REPLACE PACKAGE my_pkg
AS
TYPE user_id_type IS TABLE OF VARCHAR2 (50)
INDEX BY BINARY_INTEGER;
END;
/
CREATE OR REPLACE PROCEDURE my_proc (
my_id VARCHAR2, ids my_pkg.user_id_type)
IS
BEGIN
DBMS_OUTPUT.put_line ('COUNT = ' || ids.COUNT);
END;
/
BEGIN
my_proc ('steven',
my_pkg.user_id_type (1 => '111', 2=> '222'));
END;
/
Package created.
Procedure created.
COUNT = 2
查看我的LiveSQL script更详细地探索数组的限定表达式。
关于arrays - 如何将查询与数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49775854/