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

Kiểu trả về cho hàm với array_agg ()

Một hàm cần khai báo kiểu trả về. Một mảng chỉ có thể dựa trên một loại phần tử đã biết. Hồ sơ ẩn danh không được phép. Vì vậy, hãy tạo một kiểu kết hợp phù hợp với nhu cầu của bạn (trừ khi có một bảng hoặc dạng xem đã xác định loại hàng).

CREATE TYPE my_type (
  ts          text
, alertlevel  int
, time_passed interval
);

Đối với mục đích thử nghiệm, bạn cũng có thể tạo một bảng tạm thời để đăng ký một loại kết hợp trong thời gian của một phiên:

CREATE TEMP TABLE my_type ( ...)

(Một bảng tạm thời bị xóa vào cuối phiên, bất kỳ cấu trúc chức năng nào trên loại này sẽ bị phá vỡ sau đó.)

Sử dụng đó làm kiểu cơ sở cho mảng. Bạn có thể sử dụng một hàm SQL đơn giản cho mục đích:

CREATE OR REPLACE FUNCTION foo()
  RETURNS my_type[] AS
$func$
SELECT array_agg(result::my_type)  -- you must cast the row type!
FROM  (
   SELECT to_char("Timestamp", 'YYYY-MM-DD HH24:MI:SS')
        , "AlertLevel"
        , "Timestamp" - lag("Timestamp") OVER (ORDER BY "Timestamp")
   FROM   "Judgements"
   WHERE  "SampleID" = sampleid
   AND    "Timestamp" >= starttime
   AND    "Timestamp" <= stoptime
   ) result
WHERE "AlertLevel" > 0;
$func$
LANGUAGE sql;

Gọi:

SELECT foo();

Thay thế đơn giản với text[]

Bạn cũng có thể truyền sang text / text[] . Bạn mất tên cột và nhập thông tin, nhưng nó hoạt động hiệu quả:

CREATE OR REPLACE FUNCTION foo()
  RETURNS text[] AS
$func$
SELECT array_agg(result::text)  -- cast the record to text!
FROM  ( ... ) result
...;
$func$
LANGUAGE sql;

Nếu bạn không thực sự cần một mảng, bạn có thể loại bỏ array_agg() , trả về các hàng riêng lẻ và khai báo kiểu trả về với RETURNS TABLE (...) . Tìm kiếm SO cho , bạn sẽ tìm thấy nhiều ví dụ ..

Hãy nhớ gọi hàm set-return bằng:

SELECT * FROM foo();



  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ài đặt / Chạy cơ sở dữ liệu Postgres cục bộ

  2. Bỏ kết hợp nhiều mảng song song

  3. PGError:ERROR:quyền bị từ chối đối với mối quan hệ (khi sử dụng Heroku)

  4. Lỗi cơ sở dữ liệu trong bộ nhớ H2 Lỗi chuyển đổi dữ liệu khi chuyển đổi dữ liệu khi sử dụng UUID làm khóa chính

  5. PostgreSQL:khoảng thời gian định dạng tính bằng phút