存储过程中的嵌套表



下面显示的PL/SQL脚本在第20行执行失败:

    declare 
      type string_table is table of varchar(100);
      v_names string_table := string_table();
    begin
      v_names.EXTEND(3);
      v_names(1) := 'name1';
      v_names(2) := 'name2';
      v_names(3) := 'name3';
      dbms_output.put_line(v_names(1));
      dbms_output.put_line(v_names(2));
      dbms_output.put_line(v_names(3));
      dbms_output.put_line(v_names.COUNT());
20    select * from table(v_names);
    end;

以下是报告的错误消息:

ORA-06550:第20行,第23列:PLS-00642:SQL语句中不允许使用本地集合类型ORA-06550:第20行,第17列:PL/SQL:ORA-22095:无法访问非嵌套表项中的行ORA-06550:第20行,第3列:PL/SQL:SQL语句被忽略。

如何解决这个问题的任何想法。

请注意,我写这个代码只是为了向SO发布这个问题。类似的代码是一个更大的包的一部分。。。

提前感谢!

Zen

您只能对数据库中定义的类型使用SQL(如SELECT(,使用CREATE TYPE:

create type string_table is table of varchar(100);
/

然后:

declare 
      v_names string_table := string_table();
    begin
      v_names.EXTEND(3);
      v_names(1) := 'name1';
      v_names(2) := 'name2';
      v_names(3) := 'name3';
      dbms_output.put_line(v_names(1));
      dbms_output.put_line(v_names(2));
      dbms_output.put_line(v_names(3));
      dbms_output.put_line(v_names.COUNT());
      select * from table(v_names);
    end;

相关内容

  • 没有找到相关文章

最新更新