Nói một cách chính xác, không có thứ gọi là "tập lệnh plpgsql" - PL / pgQuery là ngôn ngữ thủ tục mặc định của PostgreQuery. Đó là tập lệnh SQL hoặc hàm / thủ tục plpgsql. Ví dụ của bạn dường như chỉ ra một tập lệnh SQL.
Thay vào đó, bạn có thể tạo một hàm plpgsql (hoặc sql) ( phía máy chủ ) , có bất kỳ số lượng đối số nào. Nó rất đơn giản miễn là các đối số values
. Sẽ phức tạp hơn một chút nếu các đối số bao gồm các định danh. Sau đó, bạn sẽ phải sử dụng PL / pgQuery với SQL động và EXECUTE
.
PL / pgSQL được cài đặt sẵn theo mặc định trong PostgreSQL 9.0 trở lên. Bạn phải cài đặt nó một lần cho mỗi cơ sở dữ liệu trong Postgres 8.3, mặc dù:
CREATE LANGUGAGE plpgsql;
Nói về phiên bản: bạn nên xem xét nâng cấp lên phiên bản hiện tại của PostgreSQL. v8.3 đã rất cũ, đến cuối năm 2013.
Vì dường như bạn đã có một tập lệnh SQL sẵn sàng, tôi sẽ trình bày một hàm SQL. Hàm giả đơn giản với hai đối số nguyên:
CREATE OR REPLACE FUNCTION func(int, int)
LANGUAGE sql RETURNS void AS
$func$
UPDATE tbl1 SET col1 = $1 WHERE id = $2;
UPDATE tbl2 SET col1 = $1 WHERE id = $2;
$func$;
Bạn có thể tìm thấy nhiều ví dụ phức tạp hơn cho plpgsql tại đây trên dba.SE hoặc trên SO .
Bạn có thể gọi hàm này và đưa các tham số vào tập lệnh shell: Ví dụ cơ bản cho cuộc gọi trong tập lệnh shell sử dụng tham số đầu vào cho tham số nguyên (không có dấu ngoặc đơn xung quanh giá trị cần thiết):
psql mydb -c "SELECT func($1, $2)"
Hoặc với bất kỳ loại dữ liệu:
psql mydb -c "SELECT func2('$1'::text, '$2'::numeric)"
-c
thực thi một chuỗi lệnh và sau đó thoát. Thông tin thêm về các đối số dòng lệnh của psql trong hướng dẫn .
-v
đối số của psql.