我有以下类型:
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,
);
但我一直收到这个错误。我该如何解决?
答案 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显示此编译并运行。