Odpovídáte na názor ke článku PostgreSQL: PL/pgSQL – Serverové programování 01.
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 34 818×
Přečteno 23 694×
Přečteno 20 976×
Přečteno 20 876×
Přečteno 20 866×