未初始化的集合 PL/SQL

uninitialized collection PL/SQL

我有以下类型:

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;

但我收到错误 Reference to uninitialized collection 。 我试图在调用本身中初始化集合 -

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

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

您的过程有一个 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 显示它也可以编译和运行。