Wie kann man 2 SQL Anfragen in einer Package packen und...?

antwortsuchende

Grünschnabel
Hallo zusammen,

hatte jemand schon diese Erfahrung?.
Ich arbeite mit einer Oracle - DB. Wie kann man 2 Anfragen in einer Package packen und diese mit einem Cursor ausgeben?.

Für irgendwelche Tips thanks in advance!!
 
Du darfst ruhig deine Frage etwas präziser formulieren. Ansonsten kriegst du Antworten die dir nicht gefallen werden.

Antwort auf deine Frage:
Mach aus 2 Anfragen eine Anfrage mit verschiedenen Argumenten, verknüpfe alles im Package und gibs als Cursor zurück.

Ansonsten, eine Anfrage - eine Antwort. Oder welche Anfrage soll die Antwort bekommen? Die erste? die Zweite?

Du kannst natürlich auch ein Resultat in eine Variable speichern und bei der zweiten Anfrage wieder auslesen.

Du kannst das Resultat der Ersten auch in einer Tabelle zweischenspeichern, die ID zurückgeben und bei der Zeiten die id wieder mitliefern um die Resltate zu verknüpfen und die Zweischenspeicherung zu löschen.

Oder du löst das Problem ausserhalb von PL/SQL

Du siehst, es gibt viele Lösungen. Nur habe ich echt keine Ahnung welche auf dein Problem passen könnten, da deine Frage keine diesbezügliche Antworten liefert
 
danke für die schnelle Antwort. Es geht darum, dass beide SQL Abfragen (sorry, ich hatte da Anfragen geschrieben) jeweils ein ergebnis liefern.

Beide sind SELECT Anweisungen...
 
Hallo,

mit der beschreibung wirst du nicht viel hilfe bekommen.

Poste mal deine SQL Abfrage. Schreibe auch dazu was du genau machen willst.

lg
 
Zuletzt bearbeitet:
1)
SELECT e1.employee_id, e1.manager_id, e2.employee_id
FROM employees e1, employees e2
WHERE e1.manager_id(+) = e2.employee_id;

2)
SELECT p.bestellnr, p.menge, p.artikelnr, a.bezeichnung FROM posten p LEFT JOIN artikel a ON p.artikelnr = a.artikelnr WHERE a.bezeichnung IS NULL;

Jede soll jeweils ein Ergebnis liefern und beide in einer Package eingepackt werden...
 
1)
SELECT e1.employee_id, e1.manager_id, e2.employee_id
FROM employees e1, employees e2
WHERE e1.manager_id(+) = e2.employee_id;

2)
SELECT p.bestellnr, p.menge, p.artikelnr, a.bezeichnung FROM posten p LEFT JOIN artikel a ON p.artikelnr = a.artikelnr WHERE a.bezeichnung IS NULL;

Jede soll jeweils ein Ergebnis liefern und beide in einer Package eingepackt werden...


Die erste Abfrage verstehe ich nicht ganz das. Möchtest du herausfinden bei Welchem Datensatz die manager_id gleich der employee_id ist oder wie ?

Also Manager 1 soll auch employee_id = 1 haben ? Ist das so richtig ?

Wenn es dir nur um einen Datensatz geht dann mach doch

Code:
SELECT e1.employee_id, e1.manager_id, e1.employee_id
   FROM employees e1
   WHERE rownum <2;

Das mit dem Package habe ich immer noch nicht verstanden in welcher Form soll das Zurück gegeben werden ? String ? DBMS_OUTPUT ? Schreib ein bischen mehr dir muss man ja alles aus der Nase ziehen kein wunder das keiner Antwortet

Also hop hop beschreib das besser dann kann man dir auch besser helfen

lg
 
Hallo Xervos,

vielen Dank für deine Antwort. Ich habe mir viele Varianten angeschaut und versucht mit einer folgende zu basteln. Sorry, wenn meine Beschreibung nicht klar ist. Diese scheint sehr praktisch zu sein:

CREATE OR REPLACE PACKAGE pkg_test AS

TYPE RecTyp1 IS RECORD (e1.employee_id, e1.manager_id, e2.employee_id );

TYPE RecTyp2 IS RECORD (p.bestellnr, p.menge, p.artikelnr, a.bezeichnung);

CURSOR curs1 RETURN RecTyp1;
CURSOR curs2 RETURN RecTyp2;
END pkg_test;


CREATE OR REPLACE PACKAGE BODY pkg_test AS

CURSOR curs1 RETURN RecTyp1 IS
SELECT .... die erste select Abfrage;


CURSOR curs2 RETURN RecTyp2 IS
SELECT .... die zweite select Abfrage;

END pkg_test;

Wobei da die Datentypen in der Spezifikation fehlen...
 
öhm.. sollte innerhalb des Packages nicht Funktionen definert werden?
Oder wie willst du das ganze aufrufen?

Und bitte, schreib dein SQL in SQL-Tags [code=sql]Dein SQL, PL/SQL[/code]

SQL:
CREATE OR REPLACE PACKAGE pkg_test AS

TYPE RecTyp1 IS RECORD (e1.employee_id, e1.manager_id, e2.employee_id );

TYPE RecTyp2 IS RECORD (p.bestellnr, p.menge, p.artikelnr, a.bezeichnung);

CURSOR curs1 RETURN RecTyp1;
CURSOR curs2 RETURN RecTyp2;
END pkg_test;


CREATE OR REPLACE PACKAGE BODY pkg_test AS

CURSOR curs1 RETURN RecTyp1 IS
SELECT .... die erste select Abfrage;


CURSOR curs2 RETURN RecTyp2 IS
SELECT .... die zweite select Abfrage;

END pkg_test;
 
Zuletzt bearbeitet von einem Moderator:
Also ich weiß nicht was du da machen willst aber so wird es nicht Klappen wenn dann so. Wo hast du den Code her ? mir scheint das so als würdest du gerade damit anfangen SQL Zu lernen. Kann das sein ?

SQL:
create or replace package pkg_test IS
   
TYPE RecTyp1 IS RECORD 
(employee_id    e1.employee_id%TYPE, 
 manager_id      e1.manager_id%TYPE
 );
 
END pkg_test;

Wobei du dir noch Funktionen Definieren musst usw.

lg
 
Zuletzt bearbeitet von einem Moderator:
Deswegen hatte ich gemeint, dass die Typen fehlen, habe ich aber nicht reingeschrieben. Ich weiss selber dass das falsch wäre, wenn ich die Typen nicht reinschreibe.
Also ruhig...falsche Schätzung...ich habe SQL Kenntnisse...beim nächsten Mal werde ich versuchen, sehr präzise, perfekt meine Beiträge zu erklären.

Ich danke dir auch, dass du mir deine Korrektur gegeben hast. Nun weiss ich auch dass ich dabei die Konstruktion

e1.employee_id%TYPE z.B. benutzen kann.

:-)

Diese ist die Link, wo ich die Variante gefunden habe:

http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/09_packs.htm

Das Beispiel ist unter dem Punkt Example of a PL/SQL Package erwähnt...
 

Neue Beiträge

Zurück