พูดอย่างเคร่งครัดไม่มีสิ่งเช่น "plpgsql script" - PL / pgSQL เป็นภาษาขั้นตอนเริ่มต้นของ PostgreSQL มันเป็นสคริปต์ SQL หรือฟังก์ชัน / โพรซีเดอร์ plpgsql ตัวอย่างของคุณดูเหมือนจะระบุสคริปต์ SQL
คุณสามารถสร้างฟังก์ชั่น (ฝั่งเซิร์ฟเวอร์) plpgsql (หรือ sql)แทนซึ่งใช้อาร์กิวเมนต์จำนวนเท่าใดก็ได้ values
มันง่ายมากตราบใดที่ข้อโต้แย้งที่มี มันจะซับซ้อนกว่านี้เล็กน้อยถ้าข้อโต้แย้งมีตัวระบุ แล้วคุณจะต้องใช้ PL / pgSQL กับ SQL EXECUTE
แบบไดนามิกและ
PL / pgSQL ติดตั้งล่วงหน้าโดยค่าเริ่มต้นใน PostgreSQL 9.0 หรือใหม่กว่า คุณต้องติดตั้งหนึ่งครั้งต่อฐานข้อมูลใน Postgres 8.3 แต่:
CREATE LANGUGAGE plpgsql;
การพูดของรุ่น: คุณควรพิจารณาอัปเกรดเป็นรุ่นปัจจุบันของ PostgreSQL v8.3 เก่ามากในตอนนี้จนถึงสิ้นปี 2556
เนื่องจากคุณดูเหมือนจะมีสคริปต์ SQL พร้อมฉันจะสาธิตฟังก์ชัน SQL ฟังก์ชั่นดัมมี่ง่าย ๆ พร้อมอาร์กิวเมนต์จำนวนเต็มสองข้อ:
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$;
คุณสามารถหาตัวอย่างที่มีความซับซ้อนอื่น ๆ อีกมากมายสำหรับ plpgsql ที่นี่ใน dba.SEหรือในดังนั้น
คุณสามารถเรียกใช้ฟังก์ชันนี้และส่งพารามิเตอร์ในเชลล์สคริปต์: ตัวอย่างพื้นฐานสำหรับการโทรในเชลล์สคริปต์ที่ใช้พารามิเตอร์อินพุตสำหรับพารามิเตอร์จำนวนเต็ม (ไม่ต้องใส่เครื่องหมายคำพูดเดี่ยว ๆ รอบค่าที่ต้องการ):
psql mydb -c "SELECT func($1, $2)"
หรือกับชนิดข้อมูลใด ๆ :
psql mydb -c "SELECT func2('$1'::text, '$2'::numeric)"
-c
รันหนึ่งสตริงคำสั่งแล้วออก เพิ่มเติมเกี่ยวกับบรรทัดคำสั่งขัดแย้งของpsql ในคู่มือ
-v
ข้อโต้แย้งของ psql