1

下面显示的 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-22905: 无法访问非嵌套表项中的行

ORA-06550:第 20 行,第 3 列:
PL/SQL:忽略 SQL 语句。

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

请注意,我编写此代码只是为了将此问题发布给 SO。类似的代码是更大包的一部分......

提前致谢!

4

1 回答 1

3

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

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;
于 2011-07-04T16:45:20.333 回答