PostgreSQL - ฟังก์ชั่น

PostgreSQL functionsหรือที่เรียกว่า Stored Procedures ช่วยให้คุณสามารถดำเนินการที่โดยปกติจะใช้เวลาหลายแบบสอบถามและไปกลับในฟังก์ชันเดียวภายในฐานข้อมูล ฟังก์ชันช่วยให้สามารถใช้ฐานข้อมูลซ้ำได้เนื่องจากแอปพลิเคชันอื่นสามารถโต้ตอบโดยตรงกับโพรซีเดอร์ที่จัดเก็บไว้ของคุณแทนที่จะใช้รหัสระดับกลางหรือรหัสซ้ำ

สามารถสร้างฟังก์ชันในภาษาที่คุณเลือกเช่น SQL, PL / pgSQL, C, Python เป็นต้น

ไวยากรณ์

ไวยากรณ์พื้นฐานในการสร้างฟังก์ชันมีดังนี้ -

CREATE [OR REPLACE] FUNCTION function_name (arguments) 
RETURNS return_datatype AS $variable_name$
   DECLARE
      declaration;
      [...]
   BEGIN
      < function_body >
      [...]
      RETURN { variable_name | value }
   END; LANGUAGE plpgsql;

ที่ไหน

  • function-name ระบุชื่อของฟังก์ชัน

  • ตัวเลือก [หรือแทนที่] อนุญาตให้แก้ไขฟังก์ชันที่มีอยู่

  • ฟังก์ชันต้องมีไฟล์ return คำให้การ.

  • RETURNอนุประโยคระบุชนิดข้อมูลที่คุณจะส่งคืนจากฟังก์ชัน return_datatype สามารถเป็นประเภทฐานคอมโพสิตหรือโดเมนหรือสามารถอ้างอิงประเภทของคอลัมน์ตาราง

  • function-body มีส่วนปฏิบัติการ

  • คีย์เวิร์ด AS ใช้สำหรับสร้างฟังก์ชันแบบสแตนด์อโลน

  • plpgsqlคือชื่อของภาษาที่ใช้ฟังก์ชันนี้ในที่นี้เราใช้ตัวเลือกนี้สำหรับ PostgreSQL ซึ่งอาจเป็น SQL, C, internal หรือชื่อของภาษาขั้นตอนที่ผู้ใช้กำหนดเอง สำหรับความเข้ากันได้แบบย้อนหลังชื่อสามารถถูกใส่ไว้ด้วยเครื่องหมายคำพูดเดี่ยว

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการสร้างและเรียกใช้ฟังก์ชันแบบสแตนด์อโลน ฟังก์ชันนี้ส่งคืนจำนวนระเบียนทั้งหมดในตาราง COMPANY เราจะใช้ตารางCOMPANYซึ่งมีบันทึกดังต่อไปนี้ -

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

ฟังก์ชัน totalRecords () มีดังนี้ -

CREATE OR REPLACE FUNCTION totalRecords ()
RETURNS integer AS $total$
declare
	total integer;
BEGIN
   SELECT count(*) into total FROM COMPANY;
   RETURN total;
END;
$total$ LANGUAGE plpgsql;

เมื่อดำเนินการค้นหาข้างต้นผลลัพธ์จะเป็น -

testdb# CREATE FUNCTION

ตอนนี้ให้เราเรียกใช้ฟังก์ชันนี้และตรวจสอบบันทึกในตาราง COMPANY

testdb=# select totalRecords();

เมื่อดำเนินการค้นหาข้างต้นผลลัพธ์จะเป็น -

totalrecords
--------------
      7
(1 row)