未初始化的集合 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 显示它也可以编译和运行。
我有以下类型:
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 显示它也可以编译和运行。