Tốt nhất với USING
mệnh đề của EXECUTE
:
CREATE FUNCTION foo ()
RETURNS trigger AS
$func$
BEGIN
IF TG_OP = 'INSERT' THEN
EXECUTE format('INSERT INTO %s SELECT $1.*'
, 'samples_' || left(NEW.md5, 2);
USING NEW;
END IF;
RETURN NULL;
END
$func$ LANGUAGE plpgsql;
Và EXECUTE
không yêu cầu dấu ngoặc đơn.
Và bạn lưu ý rằng số nhận dạng được xếp thành chữ thường trừ khi được trích dẫn khi cần thiết (%I
thay vì %s
ở định dạng format()
).
Thêm chi tiết:
- CHÈN với tên bảng động trong chức năng kích hoạt
- Cách sử dụng động TG_TABLE_NAME trong PostgreSQL 8.2?