PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menyetel opsi yang disesuaikan dalam prosedur tersimpan

Solusi pertama

Sintaks untuk SET adalah:

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

di mana value adalah nilai baru untuk configuration_parameter yang diberikan .

Untuk menetapkan nilai yang disimpan di _user_id variabel, Anda perlu membuat perintah dinamis dan kemudian EXECUTE itu.

Ini akan menjadi cara untuk melakukannya:

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

Melampirkan SQL Fiddle tautan untuk tujuan pengujian.

Catatan:

  • quote_nullable() fungsi akan mengembalikan NULL jika argumen input adalah nol. Ini mungkin tidak diperlukan dalam kasus Anda.

Solusi kedua

Anda juga dapat mencapai hal yang sama dengan set_config() berfungsi sebagai @a_horse_with_no_name dicatat. Fungsi Anda kemudian akan terlihat seperti ini:

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

Melampirkan SQL Fiddle tautan untuk tujuan pengujian.

Catatan:

  • Anda harus secara eksplisit memberikan argumen kedua ke tipe varchar
  • PERFORM digunakan untuk mengevaluasi ekspresi dan membuang hasilnya karena tidak diperlukan
  • Anda dapat menggunakan quote_nullable() berfungsi di sini juga



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Geoserver ERROR:fungsi postgis_lib_version()

  2. mencetak nilai variabel di postgresql

  3. simpan string dengan panjang sewenang-wenang di Postgresql

  4. Opsi Pemulihan Bencana untuk PostgreSQL yang Di-deploy ke Hybrid Cloud

  5. Bagaimana cara merepresentasikan tanggal dengan ketidakpastian di PostgreSQL