Wie wickeln Sie eine Oracle gespeicherte Prozedur in eine Funktion ausgeführt wird, indem eine standard-SELECT-Abfrage?

Ich bin Sie die folgenden Schritte, aber ich weiterhin eine Fehlermeldung erhalten, und sehen nicht das Problem:

1) Erstellen Sie eine benutzerdefinierte Oracle-Datentyp, der die Datenbank repräsentiert Spalten, die Sie abrufen möchten:

CREATE TYPE my_object AS OBJECT
     (COL1       VARCHAR2(50),
      COL2       VARCHAR2(50),
      COL3       VARCHAR2(50));

2) Erstellen Sie einen anderen Datentyp, der eine Tabelle des Objekts, das Sie gerade erstellt haben:


    TYPE MY_OBJ_TABLE AS TABLE OF my_object;

3) Erstellen Sie eine Funktion zurückgibt, die dieser Tabelle. Auch ein pipeline-Klausel, so dass die Ergebnisse sind per Pipeline zurück an die aufrufende SQL, zum Beispiel:


    CREATE OR REPLACE
    FUNCTION MY_FUNC (PXOBJCLASS varchar2)
    RETURN MY_OBJ_TABLE pipelined IS
    TYPE ref1 IS REF CURSOR
    Cur1 ref1,
    out_rec_my_object := my_object(null,null,null);
    myObjClass VARCHAR2(50);
    BEGIN
    myObjClass := PXOBJCLASS
    OPEN Cur1 For select PYID, PXINSNAME, PZINSKEY from PC_WORK where PXOBJCLass = ;1USING myObjClass,
    LOOP
        FETCH cur1 INTO out_rec.COL1, out_rec.COL2, out_rec.COL3;
        EXIT WHEN Cur1%NOTFOUND;
        PIPE ROW (out_rec);
    END LOOP;
    CLOSE Cur1;
    RETURN;
    END MY_FUNC; 

HINWEIS: Im obigen Beispiel, können Sie leicht ersetzen Sie die select-Anweisung mit einem Aufruf auf eine andere gespeicherte Prozedur gibt eine cursor-variable.

4) In Ihrer Anwendung, rufen Sie diese Funktion als eine Tabelle-Funktion mithilfe der folgenden SQL-Anweisung:

select COL1, COL2, COL3 from TABLE(MY_FUNC('SomeSampletask'));

InformationsquelleAutor Sheraz | 2009-05-14

Schreibe einen Kommentar