WÄHLEN Sie die Daten AUS CURSOR-PAKET, drucken Sie es

Will ich drucken Daten des Cursor_pkg.c1.row_emp für ex:Cursor_pkg.c1.row_emp.last_name wäre vorhanden in Cursor_pkg.row_emp nach Cursor_pkg_func.Print_Cur Prozedur funktionieren würde. Wie kann ich es tun?

  1. Ich erstelle PAKET mit den cursor-und rec
  2. Ich erstelle PAKET mit Verfahren, die fetch-cursor-Daten in rec
  3. Ich möchte die Ausgabe von abgerufenen Daten. Wie?

Gibt es zwei Fragen: ich möchte für die Ausgabe von Daten aus dem Paket emp_rec (Zeile) und ich möchte die Ausgabe, die es direkt aus dem PAKET Cursor_pkg_func Verfahren
P. S. Die Idee dabei ist, dass die Speicherung von Daten und Prozedur/Funktion zum abrufen und auswählen von Daten

 CREATE OR REPLACE PACKAGE Cursor_pkg AUTHID DEFINER IS
        CURSOR C1 IS
            SELECT last_name, job_id FROM employees
            WHERE job_id LIKE '%CLERK%' AND manager_id > 120
            ORDER BY last_name;
        row_emp C1%ROWTYPE;     
    END Cursor_pkg;
    /

CREATE OR REPLACE PACKAGE Cursor_pkg_func IS
PROCEDURE Print_Cur;
END Cursor_pkg_func;
/

CREATE OR REPLACE PACKAGE BODY Cursor_pkg_func IS
    PROCEDURE Print_Cur IS
    BEGIN
        OPEN Cursor_pkg.C1;
        LOOP
            FETCH Cursor_pkg.C1 INTO Cursor_pkg.row_emp;
            EXIT when Cursor_pkg.C1%NOTFOUND;
            DBMS_OUTPUT.put_line(Cursor_pkg.row_emp.last_name);
        END LOOP;
        CLOSE Cursor_pkg.C1;
     END;
END;
/

BEGIN 
Cursor_pkg_func.Print_Cur;
END;

Aber ich wollen, auswählen und drucken von Cursor_pkg.row_emp PAKET ohne Funktion erstellt.
Und, wie drucken, nicht nur Nachname, aber alle Zeile?
Fehler beginnen mit: Was stimmt nicht mit den letzten drei Anweisungen?

CREATE OR REPLACE PACKAGE Cursor_pkg_func IS
TYPE outrec_typ IS RECORD (
    var_char2  VARCHAR2(30)
  );
  TYPE outrecset IS TABLE OF outrec_typ;
  FUNCTION f_trans (p in number ) RETURN outrecset PIPELINED;
END Cursor_pkg_func;
/

CREATE OR REPLACE PACKAGE BODY Cursor_pkg_func IS
    FUNCTION f_trans (p in number) RETURN outrecset PIPELINED IS
    out_rec outrec_typ;
    BEGIN
        OPEN Cursor_pkg.C1;
        LOOP
            FETCH Cursor_pkg.C1 INTO Cursor_pkg.row_emp;
            EXIT when Cursor_pkg.C1%NOTFOUND;
        END LOOP;
        LOOP
        out_rec.var_char2 := Cursor_pkg.row_emp.last_name;
        PIPE ROW(out_rec);
        DBMS_OUTPUT.put_line(out_rec.var_char2);
        END LOOP;
        CLOSE Cursor_pkg.C1;
     RETURN;
     END f_trans;
END Cursor_pkg_func;
/

begin
Cursor_pkg_func.f_trans(5);
end;
/
  • Sie bekommen eine Fehlermeldung? oder was ist das problem, das Sie konfrontiert sind?
  • Sollten Sie untersuchen die DBMS_OUTPUT-und UTL_FILE-Pakete. Teilen und genießen.
  • Ausgang wohin? Sie haben dbms_output schon, so tun Sie gerade brauchen, um set serveroutput on wenn der client unterstützt? Oder wollen Sie einen ref-cursor zurückgeben, dass Ihre Kunden behandeln können (einschließlich Druck in SQL*Plus)?
  • SET SERVEROUTPUT ON immer auf 🙂
  • Ich nie verwenden, UTL_FILE, weil ich nicht wusste
  • Ich kann die Nutzung BEGINNEN Cursor_pkg_func.Print_Cur; END; laufen Verfahren, aber ich will drucken, die Datensätze aus row_emp von Cursor_pkg PAKET
  • Ich habe keine Fehler
  • Und, wie drucken, nicht nur Nachname, aber alle Zeile?

InformationsquelleAutor ifooi | 2013-08-03
Schreibe einen Kommentar