Veröffentlicht 12. Juni 200817 j 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
12. Juni 200817 j 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
19. Juni 200817 j 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
20. Juni 200817 j 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
20. Juni 200817 j 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] ?
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.