Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Dieses Feature wird in einer zukünftigen Version von Windows entfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen den von Oracle bereitgestellten ODBC-Treiber.
In Oracle 7.3 gibt es keine Möglichkeit, auf einen PL/SQL-Datensatztyp zuzugreifen, mit Ausnahme eines PL/SQL-Programms. Wenn eine verpackte Prozedur oder Funktion ein formales Argument aufweist, das als PL/SQL-Datensatztyp definiert ist, ist es nicht möglich, dieses formale Argument als Parameter zu binden. Verwenden Sie den PL/SQL TABLE-Typ im Microsoft ODBC-Treiber für Oracle, um Arrayparameter aus Prozeduren mit den richtigen Escapesequenzen aufzurufen.
Verwenden Sie die folgende Syntax, um die Prozedur aufzurufen:
{call <package-name>.<proc-or-func>;
(..., {resultset <max-records-requested> ,<formal-array-param_1>,;
<formal-array-param_2>,...,<formal-array-param_n> }, ... ) }
Hinweis
Der <parameter "max-records", der angefordert> wurde, muss größer oder gleich der Anzahl der Zeilen sein, die im Resultset vorhanden sind. Andernfalls gibt Oracle einen Fehler zurück, der vom Treiber an den Benutzer übergeben wird.
PL/SQL-Datensätze können nicht als Arrayparameter verwendet werden. Jeder Arrayparameter kann nur eine Spalte einer Datenbanktabelle darstellen.
Im folgenden Beispiel wird ein Paket definiert, das zwei Prozeduren enthält, die unterschiedliche Resultsets zurückgeben, und bietet dann zwei Möglichkeiten, Resultsets aus dem Paket zurückzugeben.
Paketdefinition:
CREATE OR REPLACE PACKAGE SimplePackage AS
TYPE t_id is TABLE of NUMBER(5)
INDEX BY BINARY_INTEGER;
TYPE t_Course is TABLE of VARCHAR2(10)
INDEX BY BINARY_INTEGER;
TYPE t_Dept is TABLE of VARCHAR2(5)
INDEX BY BINARY_INTEGER;
PROCEDURE proc1
(
o_id OUT t_id,
ao_course OUT t_Course,
ao_dept OUT t_Dept
);
TYPE t_pk1Type1 IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
TYPE t_pk1Type2 IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
PROCEDURE proc2
(
i_Arg1 IN NUMBER,
ao_Arg2 OUT t_pk1Type1,
ao_Arg3 OUT t_pk1Type2
);
END SimplePackage;
CREATE OR REPLACE PACKAGE BODY SimplePackage AS
PROCEDURE proc1 ( o_id OUT t_id,
ao_course OUT t_Course, ao_dept OUT t_Dept ) AS
BEGIN
o_id(1):= 200;
ao_course(1) := 'M101';
ao_dept(1) := 'EEE' ;
o_id(2) := 201;
ao_course(2) := 'PHY320';
ao_dept(2) := 'ECE' ;
END proc1;
PROCEDURE proc2
(
i_Arg1 IN NUMBER,
ao_Arg2 OUT t_pk1Type1,
ao_Arg3 OUT t_pk1Type2
)
AS
i NUMBER;
BEGIN
FOR i IN 1 .. i_Arg1 LOOP
ao_Arg2(i) := 'Row Number ' || to_char(i);
END LOOP;
FOR i IN 1 .. i_Arg1 LOOP
ao_Arg3(i) := i;
END LOOP;
END proc2;
END SimplePackage;
So rufen Sie die Prozedur PROC1 auf
Gibt alle Spalten in einem einzelnen Resultset zurück:
{call SimplePackage.Proc1( {resultset 3, o_id , ao_course, ao_dept } ) }
Gibt jede Spalte als einzelnes Resultset zurück:
{call SimplePackage.Proc1( {resultset 3, o_id}, {resultset 3, ao_course}, {resultset 3, ao_dept} ) }
Dadurch werden drei Resultsets zurückgegeben, eine für jede Spalte.
So rufen Sie die Prozedur PROC2 auf
Gibt alle Spalten in einem einzelnen Resultset zurück:
{call SimplePackage.Proc2( 5 , {resultset 5, ao_Arg2, ao_Arg3} ) }
Gibt jede Spalte als einzelnes Resultset zurück:
{call SimplePackage.Proc2( 5 , {resultset 5, ao_Arg2}, {resultset 5, ao_Arg3} ) }
Stellen Sie sicher, dass Ihre Anwendungen alle Resultsets mithilfe der SQLMoreResults-API abrufen. Weitere Informationen finden Sie in der ODBC-Programmierreferenz.
Hinweis
Im ODBC-Treiber für Oracle Version 2.0 können Oracle-Funktionen, die PL/SQL-Arrays zurückgeben, nicht zum Zurückgeben von Resultsets verwendet werden.