如何使用输入参数(Array OF INT)执行程序?
How to execute procedure with input parametr (Varray OF INT)?
CREATE OR REPLACE TYPE list_of_int IS
VARRAY(10) OF INT;
CREATE OR REPLACE PROCEDURE my_procedure(
in_lista in list_of_int
)
AS
...
exec my_procedure( [1,2,3] );
如何执行输入参数为VARRAY的程序?
你可以这样做
CREATE OR REPLACE TYPE list_of_int IS
VARRAY(10) OF INT;
/
CREATE OR REPLACE PROCEDURE my_procedure(
in_lista in list_of_int
)
AS
begin
for i in 1..in_lista.count
loop
dbms_output.put_line( in_lista(i) );
end loop;
end;
/
exec my_procedure( list_of_int(1, 2, 3) );
/
但实际上,我还没有遇到过声明 varray
类型有意义的实例。声明一个不限制集合中元素数量的嵌套 table 类型几乎肯定更有意义(好吧,我认为你被限制为 2^32 或任何你能适应的在 PGA 中,但如果你做的事情很严重,如果你接近那个)。如果有人想传递一个 11 元素列表,我想不出我想要有意死掉的代码的情况。
CREATE OR REPLACE TYPE int_t IS
table OF INT;
/
CREATE OR REPLACE PROCEDURE my_procedure(
in_lista in int_t
)
AS
begin
for i in 1..in_lista.count
loop
dbms_output.put_line( in_lista(i) );
end loop;
end;
/
exec my_procedure( int_t(1, 2, 3) );
/
CREATE OR REPLACE TYPE list_of_int IS
VARRAY(10) OF INT;
CREATE OR REPLACE PROCEDURE my_procedure(
in_lista in list_of_int
)
AS
...
exec my_procedure( [1,2,3] );
如何执行输入参数为VARRAY的程序?
你可以这样做
CREATE OR REPLACE TYPE list_of_int IS
VARRAY(10) OF INT;
/
CREATE OR REPLACE PROCEDURE my_procedure(
in_lista in list_of_int
)
AS
begin
for i in 1..in_lista.count
loop
dbms_output.put_line( in_lista(i) );
end loop;
end;
/
exec my_procedure( list_of_int(1, 2, 3) );
/
但实际上,我还没有遇到过声明 varray
类型有意义的实例。声明一个不限制集合中元素数量的嵌套 table 类型几乎肯定更有意义(好吧,我认为你被限制为 2^32 或任何你能适应的在 PGA 中,但如果你做的事情很严重,如果你接近那个)。如果有人想传递一个 11 元素列表,我想不出我想要有意死掉的代码的情况。
CREATE OR REPLACE TYPE int_t IS
table OF INT;
/
CREATE OR REPLACE PROCEDURE my_procedure(
in_lista in int_t
)
AS
begin
for i in 1..in_lista.count
loop
dbms_output.put_line( in_lista(i) );
end loop;
end;
/
exec my_procedure( int_t(1, 2, 3) );
/