Abrufen von Recordsets von gespeicherten Oracle-Prozeduren mit ADO

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 176086 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D176086
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
176086 How To Retrieve Recordsets from Oracle Stored Procedures Using ADO
In Artikel 321718 wird dieses Thema für Microsoft Visual Basic .NET behandelt.
In Artikel 308072 wird dieses Thema für Microsoft Visual Basic .NET behandelt.
In Artikel 308073 wird dieses Thema für Microsoft Visual Basic .NET behandelt.
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt, wie Sie ein Visual Basic 5.0- und ActiveX Data Objects (ADO)-Projekt oder ein Visual Basic 6.0- und ADO-Projekt erstellen, mit dem ein typisches Recordset von einer gespeicherten Oracle-Prozedur zurückgegeben wird. Dieser Artikel baut auf den im folgenden Microsoft Knowledge Base-Artikel behandelten Themen auf:
174679 Wie Abrufen von Resultsets von gespeicherter Oracle-Prozedur
Er ist annähernd identisch mit dem folgenden Artikel der Microsoft Knowledge Base, der das Thema bei Verwendung von Remote Data Objects (RDO) behandelt:
174981 Abruf typischer Ergebnismengen aus Oracle-gespeicherter Prozedur
Hinweis: Microsoft empfiehlt, den Microsoft ODBC-Treiber für Oracle zu verwenden.

Weitere Informationen

Der folgende Knowledge Base-Artikel enthält ein ausführliches Beispiel für alle Methoden, mit RDO ein Recordset von einer gespeicherten Prozedur abzurufen. Das Beispiel in diesem Artikel stellt eine vereinfachte Version dar:
174679 Wie Abrufen von Resultsets von gespeicherter Oracle-Prozedur
Hinweis: Die vom Microsoft ODBC-Treiber für Oracle unter Verwendung von gespeicherten Oracle-Prozeduren erstellten Recordsets sind schreibgeschützt und statisch. Sie müssen ein Oracle-Paket erstellen, um ein Recordset abzurufen.

Sie können das Beispielprojekt in diesem Artikel in Visual Basic 5.0 oder 6.0 erstellen und ADO verwenden, um auf die vom Microsoft ODBC-Treiber für Oracle erstellten Recordsets zuzugreifen und diese zu bearbeiten. Dieser Treiber ist erforderlich, um die in diesem Knowledge Base-Artikel beschriebene Funktionalität "Recordsets von gespeicherten Prozeduren" nutzen zu können:
174679 Wie Abrufen von Resultsets von gespeicherter Oracle-Prozedur
(Dies ist derzeit der einzige erhältliche Treiber, mit dem ein Recordset von einer gespeicherten Prozedur abgerufen werden kann.) Weitere Informationen über die Verwendung von Visual Basic mit Oracle finden Sie im folgenden Artikel der Microsoft Knowledge Base, der in seinen Beispielen mit RDO 2.0 arbeitet:
167225 Wie Zugreifen auf eine Oracle-Datenbank, die RDO verwendet
Hinweis: Sie müssen den MDAC 2.1-Stapel (oder neuere Version) beziehen und installieren, um das Beispiel in diesem Artikel verwenden zu können. Im folgenden Artikel der Microsoft Knowledge Base wird beschrieben, wie Sie die Oracle- und MDAC-Komponenten erhalten können:
175018 Wie Erwerben und Installieren des Microsoft Oracle ODBC-Treibers
MDAC 1.5 enthält ADO 1.5 und den Microsoft ODBC-Treiber für Oracle 2.0.

Der MDAC 2.x-Stapel, der den 2.573-Treiber enthält, steht auf der folgenden Website zum Download zur Verfügung:
http://msdn.microsoft.com/dataaccess
Dieser Artikel ist in zwei Abschnitte unterteilt: Der erste Abschnitt enthält eine schrittweise Anleitung zum Erstellen des Projekts. Der zweite Abschnitt enthält eine ausführliche Diskussion der interessanten Teile des Projekts.

Beispiel mit schrittweiser Anleitung

  1. Führen Sie das folgende DDL-Skript auf dem Oracle-Server aus:
    DROP TABLE person;
    
    CREATE TABLE person
     (ssn     NUMBER(9) PRIMARY KEY,
      fname   VARCHAR2(15),
      lname   VARCHAR2(20));
    
    INSERT INTO person VALUES(555662222,'Sam','Goodwin');
    
    INSERT INTO person VALUES(555882222,'Kent','Clark');
    
    INSERT INTO person VALUES(666223333,'Jane','Doe');
    
    COMMIT;
     / 
    					
  2. Erstellen Sie das folgende Paket auf dem Oracle-Server:
    CREATE OR REPLACE PACKAGE packperson
      AS
        TYPE tssn is TABLE of  NUMBER(10)
        INDEX BY BINARY_INTEGER;
        TYPE tfname is TABLE of VARCHAR2(15)
        INDEX BY BINARY_INTEGER;
        TYPE tlname is TABLE of VARCHAR2(20)
        INDEX BY BINARY_INTEGER;
    
        PROCEDURE allperson
                (ssn    OUT     tssn,
                 fname  OUT     tfname,
                 lname  OUT     tlname);
        PROCEDURE oneperson
            (onessn IN      NUMBER,
             ssn    OUT     tssn,
                 fname  OUT     tfname,
                 lname  OUT     tlname);
    END packperson;
    / 
    					
  3. Erstellen Sie das folgende Paket auf dem Oracle-Server:
    CREATE OR REPLACE PACKAGE BODY packperson
    AS
    
    PROCEDURE allperson
                (ssn    OUT     tssn,
                 fname  OUT     tfname,
                 lname  OUT     tlname)
    IS
        CURSOR person_cur IS
                SELECT ssn, fname, lname
                FROM person;
    
        percount NUMBER DEFAULT 1;
    
    BEGIN
        FOR singleperson IN person_cur
        LOOP
                ssn(percount) := singleperson.ssn;
                fname(percount) := singleperson.fname;
                lname(percount) := singleperson.lname;
                percount := percount + 1;
        END LOOP;
    END;
    
    PROCEDURE oneperson
          (onessn  IN    NUMBER,
                 ssn     OUT   tssn,
                 fname   OUT   tfname,
                 lname   OUT   tlname)
    IS
     CURSOR person_cur IS
               SELECT ssn, fname, lname
               FROM person
               WHERE ssn = onessn;
    
        percount NUMBER DEFAULT 1;
    
    BEGIN
        FOR singleperson IN person_cur
        LOOP
                ssn(percount) := singleperson.ssn;
                fname(percount) := singleperson.fname;
                lname(percount) := singleperson.lname;
                percount := percount + 1;
        END LOOP;
    END;
    END;
    / 
    					
  4. Öffnen Sie ein neues Projekt in Visual Basic 5.0 oder 6.0 Enterprise Edition. Form1 wird standardmäßig erstellt.
  5. Setzen Sie die folgenden Steuerelemente in das Formular:
    Steuerelement     Name             Text/Beschriftung
    -----------------------------------------
    Schaltfläche      cmdGetEveryone   Get Everyone
    Schaltfläche      cmdGetOne        Get One
    					
  6. Klicken Sie im Menü Extras auf Optionen. Klicken Sie auf die Option Default Full Module View, und klicken Sie anschließend auf OK. Dies ermöglicht die Anzeige des vollständigen Codes für dieses Projekt.
  7. Fügen Sie den folgenden Code in das Codefenster ein:
    Option Explicit
    Dim Cn As ADODB.Connection
    Dim CPw1 As ADODB.Command
    Dim CPw2 As ADODB.Command
    Dim Rs As ADODB.Recordset
    Dim Conn As String
    Dim QSQL As String
    Dim inputssn As Long
    
    Private Sub cmdGetEveryone_Click()
    
      Set Rs.Source = CPw1
    
      Rs.Open
    
      While Not Rs.EOF
          MsgBox "Person data: " & Rs(0) & ", " & Rs(1) & ", " & Rs(2)
          Rs.MoveNext
      Wend
    
      Rs.Close
    
    End Sub
    
    Private Sub cmdGetOne_Click()
    
      Set Rs.Source = CPw2
    
      inputssn = InputBox("Enter the SSN you wish to retrieve:")
    
      CPw2(0) = inputssn
    
      Rs.Open
    
      MsgBox "Person data: " & Rs(0) & ", " & Rs(1) & ", " & Rs(2)
    
      Rs.Close
    
    End Sub
    
    Private Sub Form_Load()
    
      'Replace <User ID>, <Password>, and <Server> with the
      'appropriate parameters.
      Conn = "UID=*****;PWD=*****;driver=" _
             & "{Microsoft ODBC for Oracle};SERVER=dseOracle;"
    
      Set Cn = New ADODB.Connection
      With Cn
          .ConnectionString = Conn
          .CursorLocation = adUseClient
          .Open
      End With
    
      QSQL = "{call packperson.allperson({resultset 9, ssn, fname, " _
             & "lname})}"
    
      Set CPw1 = New ADODB.Command
      With CPw1
          Set .ActiveConnection = Cn
          .CommandText = QSQL
          .CommandType = adCmdText
      End With
    
      QSQL = "{call packperson.oneperson(?,{resultset 2, ssn, fname, " _
             & "lname})}"
    
      Set CPw2 = New ADODB.Command
      With CPw2
          Set .ActiveConnection = Cn
          .CommandText = QSQL
          .CommandType = adCmdText
          .Parameters.Append .CreateParameter(, adInteger, adParamInput)
      End With
    
      Set Rs = New ADODB.Recordset
      With Rs
          .CursorType = adOpenStatic
          .LockType = adLockReadOnly
      End With
    
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    
      Cn.Close
      Set Cn = Nothing
      Set CPw1 = Nothing
      Set CPw2 = Nothing
      Set Rs = Nothing
    
    End Sub
  8. Gehen Sie auf das Menüelement Projekt und wählen Sie Verweise aus. Wählen Sie die "Microsoft Active Data Objects 2.x-Bibliothek" aus.
  9. Führen Sie das Projekt aus. Wenn Sie auf die Schaltfläche "Get Everyone" klicken, wird die folgende Abfrage ausgeführt:
    QSQL = "{call packperson.allperson({resultset 9, ssn, fname, "_
                   & "lname})}"
    					
Diese Abfrage führt die gespeicherte Prozedur "allperson" aus, die sich im Paket "packperson" befindet (referenziert als "packperson.allperson"). Es gibt keine Eingabeparameter, und die Prozedur gibt drei Arrays (ssn, fname und lname) zurück, von denen jedes neun oder weniger Datensätze enthält. Wie im folgenden Artikel der Microsoft Knowledge Base beschrieben,
174679 Wie Abrufen von Resultsets von gespeicherter Oracle-Prozedur
müssen Sie die maximale Anzahl der Zeilen angeben, die zurückgegeben werden sollen. Weitere Informationen hierzu finden Sie in der Microsoft ODBC-Treiber für Oracle-Hilfedatei und im Microsoft Knowledge Base-Artikel Q174679.

Wenn Sie auf die Schaltfläche "Get One" klicken, erscheint ein Eingabefeld mit der Aufforderung, eine SSN einzugeben. Sobald Sie eine gültige SSN eingegeben und auf OK geklickt haben, wird die folgende Abfrage ausgeführt:
QSQL = "{call packperson.oneperson(?,{resultset 2, ssn, fname, "_
           & "lname})}"
				
Die gespeicherte Prozedur "packperson.oneperson" verwendet einen einzigen Eingabeparameter als Auswahlkriterium für das Recordset, das erstellt wird. Genauso wie "packperson.allperson" wird das Recordset unter Verwendung der in "packperson" definierten Tabellentypen erstellt. (Weitere Informationen finden Sie im Knowledge Base-Artikel Q174679.)

Hinweis: Für gespeicherte Oracle-Prozeduren, die ein Recordset zurückgeben, können nur Eingabeparameter definiert werden. Sie können keine Ausgabeparameter für diese gespeicherten Prozeduren definieren.

Diese beiden gespeicherten Prozeduren stellen die grundlegende Verwendung von gespeicherten Prozeduren dar, die Recordsets zurückgeben. Die erste Prozedur gibt einen vordefinierten Satz von Datensätzen (d. h. Everyone), die zweite Prozedur einen Satz von Datensätzen (oder nur einen Datensatz) auf Grundlage eines oder mehrerer Eingabeparameter zurück. Sobald Sie diese Recordsets abgerufen haben, können Sie über gespeicherte Prozeduren oder mithilfe von auf dem Client erstellter SQL Aktionen wie Einfügen, Aktualisieren oder Löschen durchführen.

Informationsquellen

Microsoft ODBC-Treiber für Oracle-Hilfedatei

"Oracle PL/SQL Programming" von Steven Feuerstein

"Hitchhiker's Guide to Visual Basic & SQL Server" von William Vaughn

Weitere Informationen finden Sie in folgenden Artikeln der Microsoft Knowledge Base:
174679 Wie Abrufen von Resultsets von gespeicherter Oracle-Prozedur
175018 Wie Erwerben und Installieren des Microsoft Oracle ODBC-Treibers
174981 Abruf typischer Ergebnismengen aus Oracle-gespeicherter Prozedur
167225 Wie Zugreifen auf eine Oracle-Datenbank, die RDO verwendet

Eigenschaften

Artikel-ID: 176086 - Geändert am: Samstag, 21. Januar 2006 - Version: 8.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
Keywords: 
kbhowto kboracle kbdatabase kbdriver KB176086
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com