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

Tự động thêm một cột có nhiều giá trị vào bất kỳ bảng nào bằng cách sử dụng hàm PL / pgSQL

Tôi đã làm điều này với refcursor nếu bạn muốn danh sách cột đầu ra hoàn toàn động:

CREATE OR REPLACE FUNCTION is_record_exists(tablename character varying, columns character varying[], keepcolumns character varying[] DEFAULT NULL::character varying[])
    RETURNS SETOF refcursor AS
$BODY$

DECLARE 
    ref refcursor;
    keepColumnsList text;
    columnsList text; 
    valuesList text;
    existQuery text;
    keepQuery text;
BEGIN
    IF keepcolumns IS NOT NULL AND array_length(keepColumns, 1) > 0 THEN
        keepColumnsList :=  array_to_string(keepColumns, ', ');
    ELSE
        keepColumnsList :=  'COUNT(*)';
    END IF;

    columnsList := (SELECT array_to_string(array_agg(name || ' = ' || value), ' OR ') FROM
        (SELECT unnest(columns[1:1]) AS name, unnest(columns[2:2]) AS value) pair);

    existQuery := 'SELECT ' || keepColumnsList || ' FROM ' || tableName || ' WHERE ' || columnsList;
    RAISE NOTICE 'Exist query: %', existQuery;

    OPEN ref FOR EXECUTE
        existQuery;
    RETURN next ref;
END;$BODY$
  LANGUAGE plpgsql;

Sau đó, cần gọi FETCH ALL IN để nhận được kết quả. Cú pháp chi tiết tại đây hoặc ở đó: https://stackoverflow.com/a/12483222/630169 . Có vẻ như đó là cách duy nhất cho bây giờ. Hy vọng một điều gì đó sẽ được thay đổi trong PostgreSQL 11 với các THỦ TỤC.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sqoop trên Hadoop:NoSuchMethodError:com.google.common.base.Stopwatch.createStarted ()

  2. chọn một cột dựa trên giá trị tối thiểu của một cột khác

  3. Bắt ngày với chênh lệch múi giờ

  4. Phát hiện và xử lý khi một truy vấn cơ sở dữ liệu gặp sự cố

  5. Tạo mô hình cho Flask-AppBuilder bằng flask-sqlqcodegen