sql >> Databáze >  >> RDS >> PostgreSQL

Nastavení přizpůsobené možnosti v uložené proceduře

První řešení

Syntaxe pro SET je:

SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }

kde value je nová hodnota pro daný configuration_parameter .

Aby bylo možné přiřadit hodnotu uloženou v _user_id proměnnou, musíte vygenerovat dynamický příkaz a poté EXECUTE to.

Toto by byl způsob, jak to udělat:

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;
$$;

Připojuji SQL Fiddle odkaz pro testovací účely.

Poznámka:

  • quote_nullable() funkce vrátí NULL pokud je vstupní argument null. Ve vašem případě to nemusí být nutné.

Druhé řešení

Stejné věci můžete dosáhnout také pomocí set_config() fungovat jako @a_horse_with_no_name. Vaše funkce by pak vypadala takto:

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;
$$;

Připojuji SQL Fiddle odkaz pro testovací účely.

Poznámka:

  • Musíte explicitně přetypovat druhý argument na typ varchar
  • PERFORM se používá k vyhodnocení výrazu a zahození výsledku, protože to není potřeba
  • Mohli byste použít quote_nullable() fungovat i zde



  1. Jak zvýšit maximální počet připojení v MySQL

  2. Jak postupovat při ochraně souborů před neoprávněným stahováním

  3. Jak vytvořím dotaz SQL, který seskupuje v určitém procentuálním rozsahu

  4. Řetězec k časovému razítku v MySQL