sql >> Database teknologi >  >> RDS >> PostgreSQL

Indstilling af en tilpasset indstilling i en lagret procedure

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 returnere NULL 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



  1. Hvordan dropper man alle tabeller fra databasen med manage.py CLI i Django?

  2. Talformatering i Oracle ved hjælp af TO_CHAR

  3. TABLESAMPLE returnerer forkert antal rækker?

  4. Tips til brug af SQL Server med Salesforce