PostgreSQL - Chức năng

PostgreSQL functions, còn được gọi là Thủ tục được lưu trữ, cho phép bạn thực hiện các hoạt động thường thực hiện một số truy vấn và các chuyến đi vòng trong một hàm duy nhất trong cơ sở dữ liệu. Các chức năng cho phép tái sử dụng cơ sở dữ liệu vì các ứng dụng khác có thể tương tác trực tiếp với các thủ tục được lưu trữ của bạn thay vì mã cấp giữa hoặc mã trùng lặp.

Các hàm có thể được tạo bằng ngôn ngữ bạn chọn như SQL, PL / pgSQL, C, Python, v.v.

Cú pháp

Cú pháp cơ bản để tạo một hàm như sau:

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;

Ở đâu,

  • function-name chỉ định tên của hàm.

  • Tùy chọn [HOẶC THAY THẾ] cho phép sửa đổi một chức năng hiện có.

  • Hàm phải chứa một return tuyên bố.

  • RETURNmệnh đề chỉ định kiểu dữ liệu mà bạn sẽ trả về từ hàm. Cácreturn_datatype có thể là kiểu cơ sở, tổ hợp hoặc miền, hoặc có thể tham chiếu kiểu cột trong bảng.

  • function-body chứa phần thực thi.

  • Từ khóa AS được sử dụng để tạo một hàm độc lập.

  • plpgsqllà tên của ngôn ngữ mà hàm được triển khai. Ở đây, chúng tôi sử dụng tùy chọn này cho PostgreSQL, nó Có thể là SQL, C, nội bộ hoặc tên của ngôn ngữ thủ tục do người dùng xác định. Để tương thích ngược, tên có thể được đặt trong dấu ngoặc kép.

Thí dụ

Ví dụ sau minh họa việc tạo và gọi một hàm độc lập. Hàm này trả về tổng số bản ghi trong bảng COMPANY. Chúng ta sẽ sử dụng bảng COMPANY , có các bản ghi sau:

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)

Hàm totalRecords () như sau:

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;

Khi truy vấn trên được thực thi, kết quả sẽ là:

testdb# CREATE FUNCTION

Bây giờ, chúng ta hãy thực hiện một lệnh gọi đến hàm này và kiểm tra các bản ghi trong bảng COMPANY

testdb=# select totalRecords();

Khi truy vấn trên được thực thi, kết quả sẽ là:

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