PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Ustawianie niestandardowej opcji w procedurze składowanej

Pierwsze rozwiązanie

Składnia SET jest:

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

gdzie value to nowa wartość dla danego configuration_parameter .

Aby przypisać wartość przechowywaną w _user_id zmiennej, musisz wygenerować polecenie dynamiczne, a następnie EXECUTE to.

Byłby to sposób na zrobienie tego:

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

Dołączanie SQL Fiddle link do celów testowych.

Uwaga:

  • quote_nullable() funkcja zwróci NULL jeśli argument wejściowy ma wartość null. W twoim przypadku może to nie być konieczne.

Drugie rozwiązanie

Możesz również osiągnąć to samo z set_config() funkcjonować jako @a_koń_bez_imienia. Twoja funkcja wyglądałaby wtedy tak:

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

Dołączanie SQL Fiddle link do celów testowych.

Uwaga:

  • Musisz jawnie rzutować drugi argument na typ varchar
  • PERFORM służy do oceny wyrażenia i odrzucenia wyniku, ponieważ nie jest potrzebny
  • Możesz użyć quote_nullable() tutaj również działają



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgres csv data null błąd importu

  2. Jak działa POSITION() w PostgreSQL

  3. Jak używać funkcji PostgreSQL upper() z innymi ustawieniami regionalnymi?

  4. Jak napisać zapytanie bez uwzględniania wielkości liter zarówno dla MySQL, jak i Postgres?

  5. Jak sprawić, by instalacja gem działała na OS X Lion z Ruby 1.8.7 bez błędów seg?