Anzeige:
Ergebnis 1 bis 4 von 4

Thema: PL/SQL: Tabelle als Inputparamter einer PL/SQL-Funktion

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.08.2005
    Beiträge
    36

    PL/SQL: Tabelle als Inputparamter einer PL/SQL-Funktion

    Hi,

    folgendes Problem: Ich hätte gerne eine PL/SQL Funktion, die eine normale Datenbanktabelle als Inputparameter bekommt, mit der was ganz tolles macht und als Ergebnis wieder eine Tabelle zurückliefert. Etwa in der Art:

    CREATE OR REPLACE FUNCTION test (inputTable TABLE) RETURN TABLE AS
    BEGIN
    outputTable = doSomethinWith(inputTable);
    RETURN outputTable;
    END;
    /

    damit ich dann später SQL-Aufrufe, wie z.B.:

    SELECT * FROM test(db_relation_name);

    absetzen kann. "inputTable" und "outputTable" haben dabei nicht das gleiche Schema.
    Ich hab ein wenig rumgegoogelt und bin jetzt soweit, dass es wohl so direkt wie oben angedeutet nicht funktionieren wird.

    Frage1: Geht es doch in einer ähnlichen Weise?

    Frage2: Gibt es einen cleveren Workaround für mein Problem?


    Schonmal besten Dank im Voraus,

    Christian

  2. #2
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Du musst einen Array erzeugen.

    Ungefähr so

    Code:
    create or replace TYPE EXAMPLE_T AS TABLE OF number(19);
    
    create or replace TYPE EXAMPLE2_T AS TABLE OF number(19);
    So definierst du eine Table die du übergeben kannst. Ob das mit rowtype auch funktioniert weiß ich nicht.

    Das würde dann im Aufruf so aussehen

    Code:
    CREATE OR REPLACE FUNCTION test (inputTable EXAMPLE_T) RETURN EXAMPLE2_T AS
    
    outputTable EXAMPLE2_T;
    
    BEGIN
    outputTable = doSomethinWith(inputTable);
    RETURN outputTable;
    END;
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  3. #3
    Registrierter Benutzer
    Registriert seit
    30.08.2005
    Beiträge
    36
    Zitat Zitat von Waxolunist
    [...] Ob das mit rowtype auch funktioniert weiß ich nicht. [...]

    Hi,

    genau das ist ja quasi mein Problem: Ich weiß zur Laufzeit nicht, wie das Schema der Tabelle aussieht, die ich übergeben möchte. Ich stecke in PL/SQL leider nicht so weit drinne, dass ich sagen könnte
    a) es geht definitiv nicht oder
    b) ich kenne den geeigneten Workaround nicht.

    Trotzdem besten Dank für dein Antwort. Ich werde auf jeden Fall noch etwas dranbleiben.


    Viele Grüße,

    Christian

  4. #4
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Habe jetzt noch einmal dein erstes Post gelesen:

    So einen Aufruf von select from table-object habe ich noch nicht gesehen. Hast du schon mal so einen Aufruf versucht. Definierst du hier im declare-Bereich ein Objekt table?

    Naja, was ich glaube ist, dass du eine Art dynamic sql suchst, á la

    Code:
    execute immediate 'select 1 from ' || p_table || ' where ' || p_wherestr || ' and rownum=1' into v_count;
    p_table ist ein varchar2 typ mit dem namen der table. Ich glaube wenn du hier mit varchars arbeitest, wirst du eher zum Erfolg kommen.

    Weil ich glaube tables gibt es wirklich nicht als Übergabeparameter. Aber es gibt Types vom Type Table aber eben keine Tables. (Den Satz wollte ich nur ausschreiben weil er so lustig klingt.)

    mfg, Christian
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •