Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

hallo

ich habe folgendes problem.

ich habe ein paar tabellen angelegt um funktionen zu testen.

ich möchte gerne eine funktion schreiben, die mir alle filme eines bestimmten genres ausgibt (videoverleih).

grundlage:

- table genre (genre_id, genre_name)

- table film (film_id, film_name, genre_id(fk))

create or replace function fn_filme_genre(f_genre_id integer)

return varchar is

begin

declare

f_film varchar(50);

begin

select film_name

into f_film

from film

where genre_id = f_genre_id;

return f_film;

end;

end fn_film_genre;

/

so weit bin ich bis jetzt!

es kann ja ziemlich realitätsnahe sein das mehrere Filme zurückgegeben werden (jeweils so viele, wie in den einzelnen genre enthalten sind).

wie kann ich dir funktion umbauen, so dass ich mehrere werte über die funktion ausgeben kann???

ich hoffe mir kann jemand helfe.

schon mal vielen dank

gruß matze

Geschrieben
hallo

ich möchte gerne eine funktion schreiben, die mir alle filme eines bestimmten genres ausgibt (videoverleih).

es kann ja ziemlich realitätsnahe sein das mehrere Filme zurückgegeben werden (jeweils so viele, wie in den einzelnen genre enthalten sind).

wie kann ich dir funktion umbauen, so dass ich mehrere werte über die funktion ausgeben kann???

ich hoffe mir kann jemand helfe.

schon mal vielen dank

gruß matze

- Hallo, Ich würde PL/SQL immer in packages kapseln.

mal als Beispiel...Du musst evtl. die Attributsnamen ändern, habe es nur so aus dem Bauch erstellt...ausserdem fehlt natürlich das Exceptionhandling etc


CREATE OR REPLACE 

PACKAGE testapp.tst_film_pkg

IS

   PROCEDURE fn_filme_genre (

      i_nGenre_ID   IN       NUMBER,

      o_rcResult    OUT      SYS_REFCURSOR

   );

END;

/


CREATE OR REPLACE 

PACKAGE BODY testapp.tst_film_pkg

IS

   PROCEDURE fn_filme_genre (

      i_nGenre_ID   IN       NUMBER,

      o_rcResult    OUT      SYS_REFCURSOR

   )

   IS

      l_nGenre_ID   NUMBER;

   BEGIN

      l_nGenre_ID := i_nGenre_ID;


      OPEN o_rcResult FOR

         SELECT f.film

           FROM film f

          WHERE f.genre_id = l_nGenre_ID;

   END;

END;

/


Gruss

Geschrieben

vielen dank für die schnelle antwort,

wie kann dich diese funktion aufrufen? ich komme mit diesen in/out parametern nicht klar. als in übergebegebe ich die id des jeweiligen genres und was ist mit out???

schon mal vielen dank!

gruß matze

Geschrieben

Hi,

kommt drauf an was Du genau machen möchtest. Schwebt dir so etwas vor?

select * from tst_film_pkg.fn_filme_genre(3)

Das geht nicht ganz so einfach. Dafür gibt es sog. PIPELINED FUNCTIONS in kombination mit Table Functions.

Allerdings wird diese Technik hauptsächlich für die Datentransformation eingesetzt.

Würde man das in deinem Fall verwenden, wäre es zusätzlich auch langsamer als ein normaler Select.

Verwendest Du ein Programm wie z.B. Java, dann kannst Du als OUT Parameter ein ResultSet übergeben, welches Du dann ganz normal abrufen kann.

Dim

Geschrieben
vielen dank für die schnelle antwort,

wie kann dich diese funktion aufrufen? ich komme mit diesen in/out parametern nicht klar. als in übergebegebe ich die id des jeweiligen genres und was ist mit out???

schon mal vielen dank!

gruß matze

- Von wo aus willst du die Procedure aufrufen ? Java ? PL/SQL ? SQL ? [irgendwas] ?

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...