在Oracle存储过程中使用架构定义类型的变量

时间:2019-09-19 21:40:55

标签: oracle oracle-sqldeveloper

我已经使用

在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:数据类型不一致:应为   CHAR获得了ARRAY_TYPE

如何在存储过程中将此自定义类型用作变量?

2 个答案:

答案 0 :(得分:1)

不确定该错误,但是您的proc定义中的括号会出现问题。

这应该有效。

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;

答案 1 :(得分:1)

使用嵌套表类型会更加传统

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;
/