Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

probleme mit pl/sql

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.