Oracle PL/SQL:如何使用可变数组作为输出参数执行过程?

Posted

技术标签:

【中文标题】Oracle PL/SQL:如何使用可变数组作为输出参数执行过程?【英文标题】:Oracle PL/SQL: how to execute a procedure with a varray as out parameter? 【发布时间】:2018-08-24 12:08:52 【问题描述】:

我正在编写一个存储过程,它将接收代码并返回一个或多个 VARCHAR2 值。值的数量将根据过程接收的代码而有所不同。

我不知道这是否是最好的方法(不用说我是初学者),但我创建了一个用户定义的类型和一个表来存储这些值。

create or replace type t_desc as varray(15) of varchar2(15);

create table all_values(code int, list t_desc);

insert into all_values values (0, t_desc('a','b','c','d'));
insert into all_values values (1, t_desc('a','b'));

然后,我写了如下程序:

create or replace procedure teste(v_code int, v_list out t_list) is
begin
    select list into v_list from all_values where code = v_code;
end;

这就是我卡住的地方。应该如何执行此过程以返回我存储在列表列中的值?

【问题讨论】:

【参考方案1】:

您必须声明一个变量并将其传递给您的 proc。

declare
  t  t_desc ;
  i int;
begin
  teste(i, t);
end;

要查看结果,您可以遍历您的 varray:

FOR x IN 1..t.COUNT LOOP
  dbms_output.put_line(t(x));
END LOOP;

【讨论】:

当我在数据库上运行它时,它会成功执行,但不会打印输出。有没有办法查看结果? @Geralt 使用循环结构

以上是关于Oracle PL/SQL:如何使用可变数组作为输出参数执行过程?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jOOQ 将 Oracle PL/SQL 常量作为参数传递?

oracle pl/sql 数组

SQL记录-PLSQL数组

Oracle CREATE TYPE 和 PL/SQL

带有游标的 pl/sql 可变数组

Oracle之数组