【发布时间】:2021-02-20 03:22:15
【问题描述】:
我想将一个 char 列表作为一个参数传递给我的程序,我了解到我可以使用 varray。但是在将它传递给我的过程之前,我是否必须声明一个 varray 实例?我想要的是这样的:
My_Procedure(['a','b','c','d','e'])
我可以将数组列表直接传递到过程中。 但我学到的是我必须这样做
create type my_type as varray of varchar;
declare
my_array My_Arraytype;
begin
my_array(1) := 'a';
my_array(2) := 'b';
my_array(3) := 'c';
my_array(4) := 'd';
my_procedure(my_array)
end;
或者除了varray还有什么办法吗?
谢谢
【问题讨论】:
-
该类型也可以在包中声明。
-
顺便说一句,您的 varray 缺少限制,例如
create type my_type as varray(42) of varchar2(1);我很少发现它的用途,与嵌套表集合相比,可变数组的功能减少了(type indicator_t as table of varchar2(1),所以我建议使用它们。 -
声明你想要的集合有什么问题?您可以利用在 Oracle 提供的包之一中声明的集合—— dbms_sql 包有很多。 docs.oracle.com/cd/B28359_01/appdev.111/b28419/… 但通常声明和使用您控制的集合类型更有意义。
-
@WilliamRobertson - 可变数组与嵌套表完全不同,根据定义(与 Oracle 实现相比)更是如此。可变数组是有序的,嵌套表不是 - 并且利用 Oracle 的愚蠢实现,它们 公开 嵌套表的数组索引(谢天谢地,仅在 PL/SQL 中,而不是在普通 SQL 中),使嵌套表 ordered 是一种非常糟糕的做法。如果顺序在 OP 的问题中有意义,那么他应该使用可变数组,而不是嵌套表。