2016-04-14 10 views
-1

Ist es möglich, eine Funktion zu erstellen, die jeden PL-Datensatztyp als Parameter akzeptiert? Dies wäre für die Protokollierung nützlich. Ich habe vorher mit LCRs gespielt und die LCR-Struktur konnte gelesen und Werte extrahiert werden, egal woher sie kamen.Beliebigen Datensatz in Oracle pl/sql lesen

+0

Plz mit einigen Beispielen –

+0

ausgearbeitet für was? – Typo

+0

Protokollieren der Datensatztypwerte. Können Sie eine Prozedur schreiben, die jeden Datensatztyp akzeptiert und Werte von diesem Datensatztyp liest, ohne den Datensatztyp zu deklarieren und nicht im Voraus zu wissen, welche Struktur und Typen des Datensatztyps enthalten sind. – user1941235

Antwort

0

Nein, du kannst nicht. Die Problemumgehung besteht darin, ein Unterprogramm zu erstellen, das einen Datensatz in eine Zeichenfolge konvertiert. Ja, es ist mühsam und ausführlich, aber manchmal ist PL/SQL.

declare 
    type foo_t is record (
    a number 
    ,b varchar2(32767) 
); 
function to_str(r in foo_t) return varchar2 is 
begin 
    return '((a = ' || r.a || ')(b = ' || r.b || '))'; 
end; 
begin 
    declare 
    v_foo foo_t; 
    begin 
    v_foo.a := 42; 
    v_foo.b := 'lorem ipsum'; 
    dbms_output.put_line(to_str(v_foo)); 
    end; 
end; 
/

Wenn Sie klug genug sind, können Sie einen Code-Generator schreiben, die alle diese to_str Unterprogramme für Sie schreibt.

+0

Ich denke, ich könnte dann so etwas tun: p_write_log ('t_record_type', l_record_type), der erste Parameter wäre der Name des Typs und zweitens der tatsächliche Datensatztyp, der anydata oder anytype zugeordnet ist? und dann konnte ich dba_objects abfragen, diesen Typ finden und dynamisches sql zusammensetzen, das die Umwandlung macht. – user1941235

+0

@ user1941235 Ich glaube nicht, dass das möglich ist. Mein derzeitiges Verständnis ist, dass es keine "anydata/type" für Datensätze gibt. – user272735