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

Làm thế nào để khai báo một mảng kiểu hàng trong một hàm PostgreSQL?

CREATE OR REPLACE FUNCTION for_example()
  RETURNS integer AS
$func$
DECLARE
   r "WEBHOST";
   b "WEBHOST"[];         -- this works
BEGIN
   FOR r IN 
      SELECT * FROM "WEBHOST"
   LOOP
      b := b || r;        -- this, too
   END LOOP;

   RAISE NOTICE '%', b;   -- get feedback
   RETURN 33;
END
$func$  LANGUAGE plpgsql; -- and lose the quotes

%rowtype nói chung là không cần thiết. Thông thường, loại hàng liên quan của bảng có sẵn dưới dạng loại cùng tên.

Và không không trích dẫn tên ngôn ngữ.

Và bạn không thể chỉ có các lệnh gọi hàm độc lập trong plpgsql . Sử dụng một nhiệm vụ thay thế.

Cũng không phải là một ý kiến ​​hay khi sử dụng số nhận dạng CaMeL-case trong Postgres. Sử dụng số nhận dạng hợp pháp, viết thường để giúp cuộc sống của bạn dễ dàng hơn.

Điều tốt nhất cho cuối cùng :Điều này có thể đơn giản hơn nhiều với hàm tổng hợp array_agg() :

CREATE OR REPLACE FUNCTION for_example()
  RETURNS integer AS
$func$
DECLARE
   b "WEBHOST"[];
BEGIN
   SELECT array_agg(tbl) INTO b FROM "WEBHOST" tbl;       

   RAISE NOTICE '%', b;
   RETURN 33;
END
$func$  LANGUAGE plpgsql;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các tính năng ẩn của PostgreSQL

  2. Sự khác biệt về dấu thời gian trong giờ cho PostgreSQL

  3. Chỉ mục bảng cho cột mảng Văn bản []

  4. currval Hàm trong PostgreSQL phàn nàn rằng cột không tồn tại

  5. Khắc phục “LỖI:thiếu mục nhập mệnh đề FROM cho bảng” trong PostgreSQL khi sử dụng UNION, EXCEPT hoặc INTERSECT