To ale není konflikt SQL identifikátoru a PLpgSQL proměnné - jedná se o tzv zastínění proměnné - pro každý blok můžete deklarovat proměnné bez ohledu na vnější bloky a používá se proměnná z aktuálního bloku. PLpgSQL se chová správně.
Nicméně toto chování může být pro programátora z jazyků, kde tato možnost není překvapivá, a proto je lze blokovat nebo si vynutit varování:
SET plpgsql.extra_warnings TO 'shadowed_variables'; CREATE FUNCTION foo(f1 int) RETURNS int AS $$ DECLARE f1 int; BEGIN RETURN f1; END $$ LANGUAGE plpgsql; WARNING: variable "f1" shadows a previously defined variable LINE 3: f1 int; SET plpgsql.extra_errors to 'shadowed_variables'; create or replace function shadowtest(f1 int) returns boolean as $$ declare f1 int; begin return 1; end $$ language plpgsql; ERROR: variable "f1" shadows a previously defined variable LINE 3: declare f1 int; begin return 1; end $$ language plpgsql;
https://www.postgresql.org/docs/9.5/static/plpgsql-development-tips.html
SQL Developer
Přečteno 31 979×
Přečteno 19 554×
Přečteno 19 507×
Přečteno 17 277×
Přečteno 16 239×