Использование переменных определенного типа схемы в хранимой процедуре Oracle - PullRequest
0 голосов
/ 20 сентября 2019

Я создал тип в Oracle, используя

create or replace type array_type 
as varray(6) of varchar2(20);

Теперь я хочу использовать это как переменную в моей хранимой процедуре.Я попытался использовать его, как показано ниже,

create or replace PROCEDURE test_proc()
IS
my_type array_type;
BEGIN
....

Это дает мне ошибку

Ошибка (124,24): PL / SQL: ORA-00932: несовместимые типы данных: ожидается, что получен CHARARRAY_TYPE

Как использовать этот пользовательский тип в качестве переменной в моей хранимой процедуре?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Было бы гораздо более привычным использовать тип вложенной таблицы

create table tblFoo( 
  col1 varchar2(10)
);

insert into tblFoo values( 'a' );
insert into tblFoo values( 'b' );
insert into tblFoo values( 'c' );
insert into tblFoo values( 'd' );

create type nt_type as table of varchar2(10);
/

declare
  l_nt nt_type := nt_type( 'a', 'd', 'f' );
begin
  for i in (select col1
              from tblFoo
             where col1 MEMBER OF l_nt)
  loop
    dbms_output.put_line( i.col1 );
  end loop;
end;
/
1 голос
/ 20 сентября 2019

Не уверен насчет ошибки, но у вас будет проблема с паренями в определении вашего процесса.

Это должно сработать.

create or replace type array_type 
as varray(6) of varchar2(20);

create or replace PROCEDURE test_proc
IS
my_type array_type;
BEGIN 
  NULL;
END;
...