0
    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 执行程序?

4

1 回答 1

0

你可以做这样的事情

    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类型有意义的实例。声明一个不限制集合中元素数量的嵌套表类型几乎肯定会更有意义(好吧,我认为你被限制在 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) );
/
于 2020-11-18T22:58:04.707 回答