Announcement

Collapse
No announcement yet.

Tabelle aus Stored Procedure ausgeben

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

  • Tabelle aus Stored Procedure ausgeben

    Hallo,

    ich hoffe es kann mir jemand mit meinem kleinen Problem helfen.

    Ich würde gern aus einer Stored Procedure eine Tabelle ausgeben (so als würde ich einen select * from ... Befehl ausführen).

    Nach einiger Recherche musste ich feststellen, dass man in PL/SQL aus einer Prozedur anscheinend bloß Cursor ausgeben kann, die dann separat mittels print aufgerufen werden müssen.

    Meine Hoffnung ruht jetzt noch in folgendem Beitrag aus einem anderen Forum in dem wohl erläutert wird, wie man eine Tabelle aus einer Prozedur ausgibt (Beitrag RE^5 Beispiel).

    http://www.wer-weiss-was.de/theme10/article310381.html

    Das Erstellen des beschriebenen Pakets hat ohne Probleme funktioniert, allerdings muss ich gestehen, dass ich jetzt nicht weiß wie dieses Paket auszuführen ist.

    Müssen beide Prozeduren ausgeführt werden oder sind sie unabhängig voneinander?

    Wie muss ich den Input beim Call der Prozedur SelectTable angeben, bzgl. pTabtestTable? Für die Variable pWhereClause weiß ich wie es geht.

    Für euere Hilfe, wie der Befehl zum Aufruf aussehen muss, wäre ich echt dankbar!

    Grüße
    Zuletzt editiert von Doc_Holliday; 09.06.2011, 01:19.

  • #2
    Hi,

    dass was Du möchtest geht via pipelined functions

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Ich glaube die Pipelined Function ist nocht nicht so das Richtige. Ich suche eine Lösung die mit einem Befehl ausgeführt werden kann.

      Bei der Pipelined Function muss, so wie ich das verstanden habe, die Tabelle ebenfalls noch mittels einer Select Zeile aufgerufen werden.

      Ich suche eine Prozedur, die unser Lieferant ausführen kann, die ihm aus einer View unserer Datenbank ein Result Set mit Messwerten zu einer bestimmten Seriennummer zurückliefert. Inputvariable ist die Seriennummer. Dabei sollte er bloß einen Datenbankzugriff haben.

      Ich habe bereits eine Prozedur erstellt, in der die Messwerte mittels eines Cursors aus der View in eine Tabelle geschrieben werden. Problem ist, das auch hier der Lieferant 2 Schritte ausführen muss (1. die Prozedur starten und 2. den Select * Befehl um die Daten aus der Tabelle zu erhalten).

      Grüße.

      Comment


      • #4
        Wieso müssen hier zwei Schritte ausgeführt werden? Beide Möglichkeiten bestehen aus einem Aufruf - liefern die Daten aber in unterschiedlicher Form zurück.

        Wenn Du einen Cursor zurückgeben möchtest, dann öffne in in der Function und gib ihn per RETURN zurück. Das Stichwort hier lautet REF CURSOR

        Dim
        Zitat Tom Kyte:
        I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

        Comment


        • #5
          Hallo Dimitri,

          danke für deine Hilfe.
          Habe das jetzt mit einer Funktion soweit hin bekommen, dass ich mit einer Abfrage das Result Set kriege.

          Habe jetzt noch ein Problem, was hoffentlich auch zu lösen geht.

          Zuerst einmal die Ausgangstabelle:

          SNR----------------Bezeichnung----Kennung-----Datentyp--------Messwert---- -Gueltig
          1145000135------------Mass K-------------mass_k------Number(3,4)---------9.362-------------TRUE
          1145000135------------Mass J--------------mass_j------Number(3,4)---------11.745------------TRUE


          Folgende Funktion habe ich erstellt:

          create or replace
          function query_dmc (DMC in varchar2)
          return t_query_dmc as
          v_ret t_query_dmc;
          status varchar2(50);
          begin
          select distinct gueltig into status from view_dmc where snr like DMC;
          select cast (multiset (select bezeichnung, kennung, datentyp, messwert from view_dmc where snr like DMC) as t_query_dmc) into v_ret from dual;
          return v_ret;
          end query_dmc;

          Damit kriege ich folgendes ResultSet:

          Messwertbezeichnung-----Messwertkennung----Datentyp---------Messwert
          Mass K------------------------------------mass_k------------Number(3,4)-----------9.362
          Mass J-------------------------------------mass_j------------Number(3,4)-----------11.745

          Mir fehlt nun noch eine dritte Zeile die den Status des Teiles wiedergibt, also...

          Freigabe-----------------------------------valid---------------BOOLEAN---------------TRUE


          Dazu habe ich in der Funktion die Variable Status deklariert. Die anderen drei Spalten haben in dieser Statuszeile immer den gleichen Wert.

          Könntest du mir bitte nochmal helfen, wie ich diese Zeile noch mit in meiner Funktion erstellen kann?

          Danke!
          Zuletzt editiert von Doc_Holliday; 09.06.2011, 23:22.

          Comment


          • #6
            Pack das was du zusätzlich noch drinnen haben möchtest per UNION ALL noch in das Subselect.

            Dim
            Zitat Tom Kyte:
            I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

            Comment

            Working...
            X