matze040184 Geschrieben 12. Juni 2008 Teilen Geschrieben 12. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dbwizard Geschrieben 12. Juni 2008 Teilen Geschrieben 12. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
matze040184 Geschrieben 19. Juni 2008 Autor Teilen Geschrieben 19. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 20. Juni 2008 Teilen Geschrieben 20. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dbwizard Geschrieben 20. Juni 2008 Teilen Geschrieben 20. Juni 2008 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] ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.