未初始化的集合PL / SQL

时间:2015-02-25 14:48:57

标签: oracle plsql

我有以下类型:

TYPE station_record_type IS OBJECT
    (
       city_name NVARCHAR2 (128),
        station_name NVARCHAR2 (128),
    );

    TYPE stations_table_type IS TABLE OF station_record_type;

我有一个接收了stations_table_type的程序。

 PROCEDURE retrieve_stations (
        o_stations_to_retrieve      OUT stations_table_type )

我尝试了以下内容 -

o_stations_to_retrieve.EXTEND;

但是我收到错误参考未初始化的集合。 我试图在调用本身初始化集合 -

DECLARE
    o_stations_to_retrieve   stations_table_type := stations_table_type();
BEGIN
    retrieve_stations_flights (
        o_stations_to_retrieve   => o_stations_to_retrieve,
      );

但我一直收到这个错误。我该如何解决?

1 个答案:

答案 0 :(得分:2)

您的程序有一个OUT参数,因此在调用者中初始化它无效。您需要在程序中初始化它:

PROCEDURE retrieve_stations (
        o_stations_to_retrieve      OUT stations_table_type ) is
BEGIN
    o_stations_to_retrieve := stations_table_type();
    o_stations_to_retrieve.EXTEND;
...

然后,您根本不需要在匿名区块中初始化它。

SQL Fiddle只显示过程编译,匿名块运行时不会引发异常。

或者,您可以在匿名块中保持初始化,但将其设为IN OUT参数:

PROCEDURE retrieve_stations (
        o_stations_to_retrieve      IN OUT stations_table_type ) is
BEGIN
    o_stations_to_retrieve.EXTEND;
...

SQL Fiddle显示此编译并运行。