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

Lỗi khi đặt n_distinction bằng biến plpgsql

Đây là do thiết kế. Sách hướng dẫn giải thích trong chương Thay thế biến :

Thay thế biến hiện chỉ hoạt động trong SELECT , INSERT , UPDATEDELETE các lệnh, bởi vì công cụ SQL chính chỉ cho phép các tham số truy vấn trong các lệnh này. Để sử dụng tên hoặc giá trị không phải là hằng số trong các kiểu câu lệnh khác (thường được gọi là câu lệnh tiện ích), bạn phải xây dựng câu lệnh tiện ích dưới dạng một chuỗi và EXECUTE nó.

Bạn không thể tham số hóa giá trị trong một câu lệnh động với EXECUTE bởi vì, trích dẫn chương Thực thi lệnh động :

Một hạn chế khác đối với các ký hiệu tham số là chúng chỉ hoạt động trong SELECT , INSERT , UPDATEDELETE các lệnh. Trong các loại câu lệnh khác (thường được gọi là câu lệnh tiện ích), bạn phải chèn giá trị theo văn bản ngay cả khi chúng chỉ là giá trị dữ liệu.

Tùy chọn duy nhất trong một hàm plpgsql là để nối giá trị vào chuỗi lệnh. Bạn có thể sử dụng format() , nhưng đối với ví dụ đơn giản, nối đơn giản là an toàn và dễ dàng ::

CREATE OR REPLACE FUNCTION pg_temp.setdistinct(_cnt real)
  RETURNS void
  LANGUAGE plpgsql AS
$$
BEGIN
   EXECUTE 'ALTER TABLE _temp ALTER COLUMN id SET (n_distinct=' || _cnt || ')';
END
$$;

Chất lượng lược đồ pg_temp. làm cho nó trở thành một chức năng "tạm thời" (không có tài liệu!), phản ánh câu hỏi.
Hướng dẫn sử dụng về n_distinct .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trợ cấp truy vấn cho một bảng trong postgres

  2. Tổng quan về các thay đổi chỉ mục trong PostgreSQL 11

  3. Tên quy trình PostgreSQL trên Solaris

  4. Cách Cluster Odoo 12 với PostgreSQL Streaming Replication để có tính khả dụng cao

  5. 5 công cụ giám sát truy vấn PostgreSQL hàng đầu