In Oracle Database 10g ist es möglich, einen assoziativen Array-Typ außerhalb eines Pakets oder einer Prozedur zu erstellen? Ich würde gerne in der Lage sein, dies zu tun, so dass ich diesen assoziativen Array-Typ in einem anderen Typ referenzieren kann. Zum Beispiel:Ist es möglich, einen Oracle-assoziativen Array-Typ außerhalb eines Pakets/einer Prozedur zu erstellen?
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 bekommen ist:
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 hält:
index by varchar2(10)
PL/SQL zu sein und es in der Schaffung erlauben doens't SQL-Typen Wenn Oracle wirklich nicht erlaubt assoziative Arrays außerhalb von Paketen zu definieren, gibt es dann eine gute Alternative? Ist es möglich, Typen zu erstellen, die Oracles Objekt innerhalb eines Pakets erweitern, so dass alle Typen in demselben Paket definiert sind?
Danke, Jeff
Edit: Korrigierte Codebeispiel hinzugefügt Protokoll aufgenommen mögliche Alternative als Frage.
Wann erhalten Sie den Fehler? Ich habe gerade beide oben genannten Arten ohne Beschwerde von Orakel, 10gR2 erstellt. Ihr Beispiel sagt INDEX BY VARCHAR2, nicht pls_integer ... – DCookie
Weitere Details und Korrekturen hinzugefügt. Vielen Dank! – jlpp