3 Stimmen

Oracle, dynamisches SQL und benannte Parameter

(Ich habe dies gefunden, das die Frage teilweise beantwortet, aber die Deklaration würde ordentlicher aussehen, da mein SQL in Oracle und MSSQL verwendet wird:) Variablen binden in dynamischem PL/SQL

Ich habe einige dynamische SQL, das ich mit Syntax wie unten ausgeführt:

EXECUTE IMMEDIATE plsql_block USING employeeid, sortname;

und dann kann ich auf diese Variablen im dynamischen SQL zugreifen mit :1, :2, usw. Kann ich stattdessen benannte Parameter verwenden? etwas wie

EXECUTE IMMEDIATE plsql_block USING employeeid => employeeid 

und dann kann ich auf sie im dynamischen SQL mit :employeeid zugreifen, anstatt auf die Position zu vertrauen?

Wenn nicht, ist mein Gedanke, etwas Ähnliches am Anfang des SQL zu tun:

declare employeeid varchar(15 := :1; 

und dann kann ich mein dynamisches SQL nach Belieben ändern, ohne mich um die Positionierung sorgen zu müssen.

Gibt es einen besseren Weg?

Danke

3voto

Robert Giesecke Punkte 4256

Dein Workaround ist das, was ich in der Vergangenheit verwendet habe.
Es gibt auch das gute alte DBMS_Sql, das das Binden von Variablen ermöglicht, ähnlich wie über OCI. (Was DBMS_Sql im Grunde sowieso zu tun scheint ;-) )

3voto

Quassnoi Punkte 396418

Sie können benannte Argumente in DBMS_SQL verwenden:

DECLARE
        res INT;
        cr INT;
BEGIN
        cr := DBMS_SQL.OPEN_CURSOR;
        DBMS_SQL.PARSE(cr, :plsql_block, DBMS_SQL.NATIVE);
        DBMS_SQL.BIND_VARIABLE(cr, ':employee', :employee);
        res := DBMS_SQL.EXECUTE(cr);
        DBMS_SQL.CLOSE_CURSOR(cr);
END;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X