Verwenden eines Oracle-Tabellentyps in IN-Klausel - Kompilieren schlägt fehl

8

Einfach versuchen, einen Cursor für die von mir angegebenen IDs zurück zu bekommen.

%Vor%

Hinweis: someschema.someentity.id ist ein NVARCHAR2 (38)

PL / SQL: ORA-00382: Der Ausdruck ist vom falschen Typ
PL / SQL: ORA-22905: kann nicht auf Zeilen von einem nicht verschachtelten Tabellenelement zugreifen

Wo gehe ich falsch?

    
Travis Heseman 11.01.2010, 22:57
quelle

2 Antworten

10

Sie können nur aus einem Sammlungstyp auswählen, der in der Datenbank über eine CREATE TYPE-Anweisung definiert ist, nicht ein assoziatives Array:

%Vor%     
Tony Andrews 11.01.2010, 23:04
quelle
3

Dies ist eine Index-by-Tabelle, die ein PL / SQL-Typ ist.

Sie können nur SQL-Typen in der SQL-Engine von Oracle verwenden. Oder PL / SQL-Typen, die Oracle so hacken kann, dass sie wie SQL-Typen aussehen.

Sie können eine einfache Array-ähnliche Sammlung erstellen und sie als Ergebnis verwenden. (kein Index von)

%Vor%

Aber die beste Kompatibilität und Stabilität erhalten Sie, indem Sie es als globalen SQL-Typ deklarieren und in Ihrem Paket verwenden:

create typ TGuidList ist eine Tabelle von NVarchar (38);

Bearbeiten: Sie brauchen keinen NVarChar für eine GUID, oder? Ein guter alter VarChar sollte den Trick gut machen.

    
Robert Giesecke 11.01.2010 23:25
quelle