Bạn không thể chuyển một bảng chẳng hạn như một tham số, chỉ tên của bảng:
CREATE FUNCTION test.fcttest(tbl text) RETURNS SETOF test.out_table AS $$
BEGIN
EXECUTE format('INSERT INTO test.out_table '
'SELECT id, another_field FROM %I', tbl);
RETURN QUERY EXECUTE format('SELECT id, another_field FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;
Khi truyền một tên bảng, bạn cần thực hiện một lệnh động. Bạn chỉ có thể làm điều này trong một hàm plpgsql. Việc sử dụng format()
hàm với %I
công cụ sửa đổi bảo vệ khỏi việc đưa vào SQL. Các hàng được trả về bằng cách sử dụng RETURN NEXT QUERY
một lần nữa bằng một lệnh động.
Lưu ý rằng logic này cả hai chèn một tập hợp các bản ghi vào bảng test.out_table
và sau đó trả về cùng một tập hợp các bản ghi. Không chắc đó có phải là điều bạn thực sự muốn hay không.