2013-09-05 59 views
11

Tôi có một bảng có loại enum trong đó và tôi đã tạo một hàm để thêm dữ liệu vào bảng đó. Tôi muốn chức năng đó được hào phóng trong những gì để chấp nhận, vì vậy tôi lấy text làm loại enum và muốn truyền nó sau.Cách để gán giá trị chuỗi vào enum

Đây là enum:

CREATE TYPE public.enum_log_priority AS ENUM (
    'critical','error','warning','notice','debug' 
); 

Và đây là các chức năng:

CREATE OR REPLACE FUNCTION public.log_write(
    _message text, 
    _priority text 
) RETURNS integer AS 
$body$ 
BEGIN 
    _priority = lower(_priority); 
    INSERT INTO log (message, priority) VALUES (_message, _priority); 

    RETURN 0; 
END 
$body$ 
LANGUAGE 'plpgsql'; 

Tôi biết điều này không làm việc:

ERROR: column "priority" is of type enum_log_priority but expression is of type text

nhưng làm thế nào tôi có thể làm điều này ?

+0

Hãy xác định cấu trúc của enum_log_priority với tất cả các giá trị có thể –

Trả lời

2

thay đổi chức năng của bạn như này:

CREATE OR REPLACE FUNCTION public.log_write(
    _message text, 
    _priority text 
) RETURNS integer AS 
$body$ 
BEGIN 
    _priority = lower(_priority); 
    INSERT INTO log (message, priority) VALUES (_message, _priority::enum_log_priority); 

    RETURN 0; 
END 
$body$ 
LANGUAGE 'plpgsql'; 

| sql fiddle demo |