Første løsning
Syntaks for SET
er:
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
hvor værdi
er den nye værdi for en given konfigurationsparameter
.
For at tildele en værdi gemt i _user_id
variabel, skal du generere en dynamisk kommando og derefter UDFØR
det.
Dette ville være måden at gøre det på:
CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true)
RETURNS void
LANGUAGE PLPGSQL
AS $$
BEGIN
EXECUTE 'SET my.user_id TO ' || quote_nullable(_user_id);
END;
$$;
Vedhæfter SQL Fiddle link til testformål.
Bemærk:
quote_nullable()
funktion ville returnereNULL
hvis input-argumentet er null. Det er muligvis ikke nødvendigt i dit tilfælde.
Anden løsning
Du kunne også opnå det samme med code>set_config() fungere som @a_hest_with_no_name noteret. Din funktion ville så se sådan ud:
CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true)
RETURNS void
LANGUAGE PLPGSQL
AS $$
BEGIN
PERFORM set_config('my.user_id', _user_id::TEXT, false);
END;
$$;
Vedhæfter SQL Fiddle link til testformål.
Bemærk:
- Du skal eksplicit caste det andet argument til en varchar-type
UDFØR
bruges til at evaluere et udtryk og kassere resultatet, da det ikke er nødvendigt- Du kan bruge
quote_nullable()
fungerer også her