PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Đặt một tùy chọn tùy chỉnh trong một quy trình được lưu trữ

Giải pháp đầu tiên

Cú pháp cho SET là:

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

giá trị value là giá trị mới cho configuration_parameter nhất định .

Để chỉ định một giá trị được lưu trữ trong _user_id biến, bạn cần tạo một lệnh động và sau đó EXECUTE nó.

Đây sẽ là cách để làm điều đó:

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

Đính kèm SQL Fiddle liên kết cho mục đích thử nghiệm.

Lưu ý:

  • quote_nullable() hàm sẽ trả về NULL nếu đối số đầu vào là null. Nó có thể không cần thiết trong trường hợp của bạn.

Giải pháp thứ hai

Bạn cũng có thể đạt được điều tương tự với set_config() chức năng như @a_horse_with_no_name đã lưu ý. Khi đó, hàm của bạn sẽ giống như sau:

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

Đính kèm SQL Fiddle liên kết cho mục đích thử nghiệm.

Lưu ý:

  • Bạn phải truyền đối số thứ hai một cách rõ ràng sang kiểu varchar
  • PERFORM được sử dụng để đánh giá một biểu thức và loại bỏ kết quả vì nó không cần thiết
  • Bạn có thể sử dụng quote_nullable() cũng hoạt động ở đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. x là một thủ tục, sử dụng cuộc gọi khi tôi đang sử dụng cuộc gọi

  2. Postgres - Tính tổng dựa trên kết quả tổng của một cột khác

  3. Chạy Kho dữ liệu trên PostgreSQL

  4. Xuất truy vấn PostgreSQL sang tệp csv bằng Python

  5. Xử lý ngoại lệ PostgreSQL