Announcement

Collapse
No announcement yet.

Datensatzrückgabe in Oracle8i mit Stored Procedure

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensatzrückgabe in Oracle8i mit Stored Procedure

    Hallo,

    ich hab nur eine kurze Frage. Kann man mit Oracle8i mehrere Datensätze mit einer Stored Procedure zurückgeben(ähnlich wie bei Interbase) ?<br>
    Meiner Meinung nach ist dies mit Oracle7 noch nicht möglich.

    Gruss

    Mark Wergen

  • #2
    Hallo<BR>
    <BR>
    Ja das geht in 8I. Wenn ich nicht vergesse stelle ich Dir morgen<BR>
    mal ein Beispiel rein.<BR>
    <BR>
    Viele Grüße<BR>
    Henry Wol

    Comment


    • #3
      Hallo,<br>
      <br>
      hier das Beispiel :<br>
      <br>
      create or replace package test_refcrs is<br>
      type TCrs is ref cursor return emp%rowtype;<br>
      procedure P(C in out TCrs);<br>
      end;<br>
      /<br>
      <br>
      create or replace package body test_refcrs is<br>
      procedure P(C in out TCrs) is<br>
      begin<br>
      open C for select * from emp order by empno;<br>
      end;<br>
      end;<br>
      /<br>

      declare<br>
      c test_refcrs.TCrs;<br>
      r emp%Rowtype;<br>
      begin<br>
      test_refcrs.P(c);<br>
      loop<br>
      exit when not c%found;<br>
      fetch c into r;<br>
      dbms_output.put_line(r.description);<br>
      end loop;<br>
      close c;<br>
      end;<br&gt

      Comment


      • #4
        Hallo,

        erstmal danke für die Antwort. Ich habe leider derzeit nur eine Oracle7 Server zur Verfügung. Das Beispiel funktioniert dort mit einer kleinen Änderung : <br>
        dbms_output.put_line(r.empno);<br>
        Lässt sich diese Procedure auch in anderen Clients als SQLPlus verwenden (Set Serveroutput on size 1000000) bei Oracle8i ?<br>
        D.H Kann ich den Resultset auch aus ADO heraus abfordern ?<br>
        Ist das Element r.description ein allgemeines Element welches den ganzen Datensatz bezeichnet ?

        Viele Grüsse

        Mar

        Comment


        • #5
          Hallo,<br>
          Aus Oracle sicht ist alles was im Spezifikation Teil des<>
          Packages zur Verfügung gestellt wird global.<br>
          Wie bekommt man es in einem Programm zurück. Rückgabe - Parameter<br>
          Cursor oder DataSet.<br>
          description ist ein Feld des records/des Result-DataSet's.<br>
          Ob es mit ADO geht, frag mich jetzt(!!) nicht. Die BDE kann es<br> nicht, DOA und ODAC bzw. NCCI8 ( Freeware zum 8I Zugriff für<br>
          Delphi, auch dort ein Beispiel dabei - www.da-soft.com - ) und die<br> neueren JDBC-Treiber von Oracle können dieses.<br>

          Viele Grüße
          Resultset's zurückholen.<br&gt

          Comment


          • #6
            Nochmal lesbar.<br>
            <br>
            Hallo,<br>
            Aus Oracle sicht ist alles was im Spezifikation Teil des<br>
            Packages zur Verfügung gestellt wird global.<br>
            Wie bekommt man es in einem Programm zurück. Rückgabe - Parameter<br>
            Cursor oder DataSet.<br>
            description ist ein Feld des records/des Result-DataSet's.<br>
            Ob es mit ADO geht, frag mich jetzt(!!) nicht. Die BDE kann es<br>
            nicht, DOA und ODAC bzw. NCCI8 ( Freeware zum 8I Zugriff für<br>
            Delphi, auch dort ein Beispiel dabei - www.da-soft.com - ) und die<br>
            neueren JDBC-Treiber von Oracle können solche Resultset's zurückholen.
            .<br>

            Viele Grüß

            Comment


            • #7
              Dank Dir für die Info. Mit DOA funktioniert's wunderbar ! Leider muss ich trotzdem ADO benutzen, wegen der unterschiedlichen Datenbanken. Mit ADO hab ich es noch nicht hinbekommen. D.h. wenn es überhaupt möglich ist.

              Gruss Mar

              Comment


              • #8
                Hallo Mark und Henry,
                Ich hatte leider auch das Problem, jedoch musste ich Stored Proceduren mit der BDE verwenden und ich habe es hingekriegt.<br>
                Anbei mein Resultat:

                <b>ORACLE Proceduren:</b>

                Diese Erfahrungen wurden mit dem SQL*Plus Worksheet von Oracle gewonnen.

                <b>Erstellung einer Procedure:</b>

                CREATE OR REPLACE PROCEDURE MM.TEST2INSERT(xID IN INTEGER)<br>
                IS<br>
                BEGIN<br>
                INSERT INTO MM.TEST2 (ID) VALUES (xID);<br>
                END;<br>
                /<br>

                Die Procedure wird erst mit dem „/“ in der Datenbank gespeichert!
                Parameterübergabe „:xID“ funktioniert nicht! Es muss „xID“ OHNE Doppelpunkt sein.

                Solange Oracle die Meldung „Warnung: Prozedur wurde mit Kompilierungsfehlern erstellt.“ bringt, wird die Procedure nicht korrekt unter Delphi funktionieren!, obwohl sie unter Oracle angelegt und im SQL-Explorer sichtbar ist.

                <b>Erstellung einer Procedure, die den höchsten ID zurückgibt:</b>

                CREATE OR REPLACE PROCEDURE MM.TEST2INSERTID(xWert IN OUT NUMBER)<br>
                IS<br>
                BEGIN<br>
                INSERT INTO MM.TEST2 (ID) VALUES (xWert);<br>
                SELECT MAX(ID) INTO xWert FROM MM.TEST2;<br>
                END;<br>
                /<br>

                <b>Ausführen von Proceduren unter SQL:</b>

                EXECUTE MM.TEST2INSERT(16)<br>
                /<br>

                der Befehl „EXECUTE PROCEDURE” funktioniert nicht!

                Gruss Markus Mülle

                Comment


                • #9
                  Hallo<br>

                  So bekommst Du einen Wert, aber kein "DataSet", also mehrere Zeilen<br>
                  zurück. Execute Procedure stammt aus Interbase. In Oracle immer<br>
                  einfach Execute.<br>
                  <br>
                  Viele Grüße<br>
                  <br>
                  Henry Wolf<br&gt

                  Comment

                  Working...
                  X