PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Задаване на персонализирана опция в съхранена процедура

Първо решение

Синтаксис за SET е:

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

където value е новата стойност за даден configuration_parameter .

За да присвоите стойност, съхранена в _user_id променлива, трябва да генерирате динамична команда и след това EXECUTE то.

Това би бил начинът да направите това:

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

Прикачване на SQL Fiddle връзка за тестови цели.

Забележка:

  • quote_nullable() функцията ще върне NULL ако входният аргумент е нула. Във вашия случай може да не е необходимо.

Второ решение

Можете също да постигнете същото с set_config() функция, както отбеляза @a_horse_with_no_name. Тогава вашата функция ще изглежда така:

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

Прикачване на SQL Fiddle връзка за тестови цели.

Забележка:

  • Трябва изрично да прехвърлите втори аргумент към тип varchar
  • PERFORM се използва за оценка на израз и отхвърляне на резултата, тъй като не е необходим
  • Можете да използвате quote_nullable() функционират и тук



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel Eloquent truncate - Ограничение за външен ключ

  2. Как да импортирате *огромни* части от данни в PostgreSQL?

  3. Използвайте изведен текст от функция като нова заявка

  4. Различни записи с обединения и ред

  5. Ръководство за Pgpool за PostgreSQL:Част първа