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

Tách chuỗi được phân tách bằng dấu phẩy trong hàm PL / pgSQL

Blue Star đã đề cập rằng có một chức năng tích hợp để chuyển đổi một chuỗi được phân tách bằng dấu phẩy thành một mảng.

Nhưng tôi khuyên bạn không nên chuyển một chuỗi được phân tách bằng dấu phẩy để bắt đầu. Nếu bạn muốn chuyển một số ID thay đổi, hãy sử dụng variadic tham số.

Trước tiên, bạn cũng không cần chạy SELECT, bạn có thể hỏi hệ thống có bao nhiêu hàng được cập nhật sau câu lệnh UPDATE.

CREATE FUNCTION update_status(p_status text, p_id variadic integer[]) 
  RETURNS character varying
  LANGUAGE plpgsql
AS
$$
DECLARE
  v_row_count bigint DEFAULT 0;
BEGIN
  UPDATE test
  SET status     = p_status,
      updated_by = 'admin'
  WHERE user_id = any (p_id);
    
  get diagnostics v_row_count = row_count;
  if v_row_count = 0 then 
    return 'User not found';
  end if;
  
  return concat(v_row_count, ' users updated');
END
$$;

Bạn có thể sử dụng nó như thế này:

select update_status('active', 1);
select update_status('active', 5, 8, 42);

Nếu vì lý do nào đó, bạn "phải" chuyển nó dưới dạng một đối số, hãy sử dụng một mảng thực để thay thế:

CREATE FUNCTION update_status(p_status text, p_id integer[]) 

Sau đó chuyển nó như thế này:

select update_status('active', array[5,8,42]);

hoặc

select update_status('active', '{5,8,42}');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để sửa chuỗi F Python trong truy vấn của tôi để không dễ bị chèn SQL?

  2. Chọn N hàng có giá trị hỗn hợp

  3. Cách thích hợp để chọn và cập nhật SQL

  4. Thúc đẩy hiệu suất cho PostgreSQL với HAProxy

  5. Cách hoạt động của to_timestamp () trong PostgreSQL