Im Oracle-Datenbank 10g ist es möglich, einen assoziativen Array-Typ außerhalb eines Pakets oder einer Prozedur zu erstellen? Ich würde gerne dazu in der Lage sein, um diesen assoziativen Array-Typ in einem anderen Typ referenzieren zu können. Beispiel:
create type my_type_map is table of varchar2(10) index by varchar2(10);
create type my_other_type as object (
id number(15),
member procedure initialize(p_my_type_map my_type_map)
) not instantiable not final;
Der Fehler, den ich erhalte, lautet:
SQL> create type my_type_map is table of varchar2(20) index by varchar2(10);
2 /
Warning: Type created with compilation errors.
SQL> show errors;
Errors for TYPE MY_TYPE_MAP:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/21 PLS-00355: use of pl/sql table not allowed in this context
SQL>
Es scheint, dass Oracle:
index by varchar2(10)
als PL/SQL betrachtet und dies nicht in der Erstellung von SQL-Typen zulässt. Wenn Oracle wirklich nicht zulässt, dass assoziative Arrays außerhalb von Paketen definiert werden, gibt es dann eine gute Alternative? Ist es möglich, Typen zu erstellen, die Oracle-Objekte innerhalb eines Pakets erweitern, sodass alle Typen im selben Paket definiert sind?
Danke, Jeff
Bearbeitet: Codebeispiel korrigiert, Log hinzugefügt, mögliche Alternative als Frage hinzugefügt.
0 Stimmen
Wann tritt der Fehler auf? Ich habe beide oben genannten Typen gerade erstellt, ohne Beanstandung von Oracle, 10gR2. Dein Beispiel sagt INDEX BY VARCHAR2, nicht pls_integer...
0 Stimmen
Hinzugefügt mehr Details und Korrekturen. Danke!