Gespeicherte Prozeduren und UDTFs: Argumentnamen in Aufrufen akzeptiert¶
Achtung
Diese Verhaltensänderung ist in Bundle 2023_03 enthalten.
Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.
Bei Aufrufen von gespeicherten Prozeduren und benutzerdefinierten Tabellenfunktionen (UDTFs), bei denen der Aufruf benannte Argumente enthält, gibt Snowflake den Namen des Arguments Vorrang vor der Position des Arguments.
- Bisher:
Bei Aufrufen von Prozeduren oder benutzerdefinierten Tabellenfunktionen (UDTFs), die benannte Argumente haben, ignoriert Snowflake die Argumentnamen und verwendet die Argumentposition, um zu bestimmen, welcher Wert an die Prozedur oder Funktion übergeben wird.
- Jetzt:
Argumentnamen haben bei Aufrufen von Prozeduren und UDTFs Vorrang vor der Argumentposition. Dies kann zu folgendem Verhalten führen, das sich von dem Verhalten vor dieser Änderung unterscheidet:
Ein bisher funktionierender Aufruf einer gespeicherten Prozedur oder einer benutzerdefinierten Tabellenfunktion kann zu einem Fehler führen.
Argumentnamen können dazu führen, dass Argumente in einer anderen Reihenfolge als bisher übergeben werden. Dies kann zu einem Fehler, zu falschen Ergebnissen oder zu einer falschen Dateneinfügung führen.
Die Namen der Argumente können dazu führen, dass eine andere gespeicherte Prozedur mit demselben Namen aufgerufen wird. Dies kann zu einem Fehler, zu falschen Ergebnissen oder zu einer falschen Dateneinfügung führen.
Das folgende Beispiel veranschaulicht, wie sich die Aufrufe von zwei gespeicherten Prozeduren vor und nach der Änderung unterscheiden können.
Das folgende Beispiel veranschaulicht, wie sich die Aufrufe von zwei gespeicherten Prozeduren vor und nach der Änderung unterscheiden können.
-- One stored procedure CREATE OR REPLACE PROCEDURE proc(STRARG1 varchar, STRARG2 varchar) RETURNS VARCHAR LANGUAGE SQL AS $$ BEGIN return 'hello'; END $$; -- Another procedure CREATE OR REPLACE PROCEDURE proc(ARG1 number, ARG2 number) RETURNS BOOLEAN LANGUAGE SQL AS $$ BEGIN return ARG1 < ARG2; END $$; -- Example A -- Before: returns 'hello' -- After: returns TRUE CALL PROC(ARG1 => '5', ARG2 => '100'); -- Example B -- Before: returns TRUE -- After: returns 'hello' CALL PROC(STRARG1 => 5, STRARG2 => 100); -- 'hello'.
Ref.: 1017