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

PostgreSQL trả về một hàm với Kiểu dữ liệu tùy chỉnh

Điều này sẽ chỉ hoạt động. enum Không thanh vân đê. Đã kiểm tra với Postgres 9.1 và 9.2

CREATE TYPE building_code AS ENUM ('IT','EMS','HSB','ENG');
CREATE TEMP TABLE venue (id int PRIMARY KEY, building_code building_code);
INSERT INTO venue VALUES (1, 'ENG');

CREATE OR REPLACE FUNCTION room_code(_id int) --!
  RETURNS building_code AS 
$func$
SELECT building_code FROM venue v WHERE v.id = $1 -- !
$func$ LANGUAGE SQL;

SELECT * FROM room_code(1);

Ngoại trừ ...

  • Trong các phiên bản trước 9.2 bạn chỉ có thể sử dụng tham số vị trí (số) ($1 ) trong các hàm SQL (không giống như các hàm plpgsql).
    Trong 9.2+ tên cột sẽ được ưu tiên, vì vậy WHERE mệnh đề của mã ban đầu của bạn sẽ luôn là TRUE và tất cả các hàng sẽ đủ điều kiện - ngoại trừ việc hàm của bạn chỉ trả về giá trị đầu tiên, vì nó không trả về SETOF building_code .
    Đổi tên tham số của bạn hoặc sử dụng tham số vị trí hoặc tốt nhất là cả hai.
    Nếu bạn phải sử dụng tên tham số xung đột, bạn có thể ghi đè tùy chọn bằng cách sử dụng tên hàm để đủ điều kiện cho tham số. Như:

    ... WHERE v.id = room_code.id
    
  • Bạn không nên sử dụng tên loại làm tên cột.

  • Bạn không nên sử dụng các tên viết hoa hỗn hợp không được trích dẫn như roomCode , sẽ được xếp thành chữ thường, trừ khi bạn trích dẫn kép:"roomCode" .

-> SQLfiddle với 3 biến thể




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xây dựng cơ sở dữ liệu khả dụng cao cho Moodle bằng PostgreSQL

  2. Tìm kiếm toàn văn kể từ PostgreSQL 8.3

  3. Chuyển đổi mảng PostgreSQL sang mảng PHP

  4. Trả về Loại bảng từ một hàm trong PostgreSQL

  5. PostgreSQL GROUP_CONCAT () Tương đương