Hàm tồn tại trong php

RETURN expression
3 định nghĩa một chức năng mới.
RETURN expression
4 sẽ tạo một chức năng mới hoặc thay thế một định nghĩa hiện có. Để có thể định nghĩa một chức năng, người dùng phải có đặc quyền
RETURN expression
5 về ngôn ngữ

Nếu một tên lược đồ được bao gồm, thì hàm được tạo trong lược đồ đã chỉ định. Mặt khác, nó được tạo trong lược đồ hiện tại. Tên của hàm mới không được khớp với bất kỳ hàm hoặc thủ tục hiện có nào có cùng loại đối số đầu vào trong cùng một lược đồ. Tuy nhiên, các hàm và thủ tục của các loại đối số khác nhau có thể dùng chung một tên [điều này được gọi là quá tải]

Để thay thế định nghĩa hiện tại của một chức năng hiện có, hãy sử dụng

RETURN expression
4. Không thể thay đổi tên hoặc loại đối số của hàm theo cách này [nếu bạn đã thử, bạn thực sự đang tạo một hàm mới, riêng biệt]. Ngoài ra,
RETURN expression
4 sẽ không cho phép bạn thay đổi kiểu trả về của một hàm hiện có. Để làm điều đó, bạn phải bỏ và tạo lại chức năng. [Khi sử dụng tham số
RETURN expression
8, điều đó có nghĩa là bạn không thể thay đổi loại của bất kỳ tham số
RETURN expression
8 nào ngoại trừ bằng cách bỏ hàm. ]

Khi

RETURN expression
4 được sử dụng để thay thế một chức năng hiện có, quyền sở hữu và quyền của chức năng không thay đổi. Tất cả các thuộc tính chức năng khác được gán các giá trị được chỉ định hoặc ngụ ý trong lệnh. Bạn phải sở hữu chức năng để thay thế nó [điều này bao gồm việc trở thành thành viên của vai trò sở hữu]

Nếu bạn bỏ và sau đó tạo lại một chức năng, thì chức năng mới không phải là thực thể giống như chức năng cũ; . đề cập đến chức năng cũ. Sử dụng

RETURN expression
4 để thay đổi định nghĩa hàm mà không phá vỡ các đối tượng tham chiếu đến hàm. Ngoài ra,
BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
2 có thể được sử dụng để thay đổi hầu hết các thuộc tính phụ trợ của một chức năng hiện có

Người dùng tạo chức năng trở thành chủ sở hữu của chức năng

Để có thể tạo một hàm, bạn phải có đặc quyền

RETURN expression
5 đối với kiểu đối số và kiểu trả về

Tham khảo Mục 38. 3 để biết thêm thông tin về chức năng viết

Thông số

BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
4

Tên [tùy chọn đủ điều kiện lược đồ] của chức năng để tạo

BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
5

Chế độ của một đối số.

BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
6,
RETURN expression
8,
BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
8, hoặc
BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
9. Nếu bỏ qua, mặc định là
BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
6. Chỉ đối số
RETURN expression
8 mới có thể theo sau đối số
BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
9. Ngoài ra, không thể sử dụng đối số
RETURN expression
8 và
BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
8 cùng với ký hiệu
RETURN expression
25

RETURN expression
26

Tên của một đối số. Một số ngôn ngữ [bao gồm SQL và PL/pgSQL] cho phép bạn sử dụng tên trong thân hàm. Đối với các ngôn ngữ khác, tên của một đối số đầu vào chỉ là tài liệu bổ sung, khi có liên quan đến chính hàm đó; . 3]. Trong mọi trường hợp, tên của một đối số đầu ra là quan trọng, bởi vì nó xác định tên cột trong loại hàng kết quả. [Nếu bạn bỏ qua tên đối số đầu ra, hệ thống sẽ chọn tên cột mặc định. ]

RETURN expression
27

[Các] loại dữ liệu của các đối số của hàm [tùy chọn đủ điều kiện lược đồ], nếu có. Các loại đối số có thể là loại cơ sở, hỗn hợp hoặc miền hoặc có thể tham chiếu loại cột của bảng

Tùy thuộc vào ngôn ngữ triển khai, nó cũng có thể được phép chỉ định "kiểu giả" chẳng hạn như

RETURN expression
28. Các loại giả chỉ ra rằng loại đối số thực tế hoặc được chỉ định không đầy đủ hoặc nằm ngoài tập hợp các loại dữ liệu SQL thông thường

Loại cột được tham chiếu bằng cách viết

RETURN expression
29.
RETURN expression
70%LOẠI. Việc sử dụng tính năng này đôi khi có thể giúp làm cho một hàm độc lập với những thay đổi đối với định nghĩa của bảng

RETURN expression
71

Một biểu thức được sử dụng làm giá trị mặc định nếu tham số không được chỉ định. Biểu thức phải bắt buộc đối với loại đối số của tham số. Chỉ các tham số đầu vào [bao gồm cả

BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
8] mới có giá trị mặc định. Tất cả các tham số đầu vào theo sau một tham số có giá trị mặc định cũng phải có giá trị mặc định

RETURN expression
73

Loại dữ liệu trả về [tùy chọn lược đồ đủ điều kiện]. Loại trả về có thể là loại cơ sở, hỗn hợp hoặc miền hoặc có thể tham chiếu loại cột của bảng. Tùy thuộc vào ngôn ngữ triển khai, nó cũng có thể được phép chỉ định "kiểu giả" chẳng hạn như

RETURN expression
28. Nếu chức năng không được phép trả về một giá trị, hãy chỉ định
RETURN expression
75 làm kiểu trả về

Khi có tham số

RETURN expression
8 hoặc
BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
8 thì có thể bỏ mệnh đề
RETURN expression
78. Nếu có, nó phải phù hợp với loại kết quả được ngụ ý bởi các tham số đầu ra.
RETURN expression
79 nếu có nhiều tham số đầu ra hoặc cùng loại với tham số đầu ra đơn

Công cụ sửa đổi

RETURN expression
70 chỉ ra rằng hàm sẽ trả về một tập hợp các mục, thay vì một mục duy nhất

Loại cột được tham chiếu bằng cách viết

RETURN expression
29.
RETURN expression
70%LOẠI

RETURN expression
70

Tên của một cột đầu ra trong cú pháp

RETURN expression
25. Đây thực sự là một cách khác để khai báo một tham số có tên là
RETURN expression
8, ngoại trừ việc
RETURN expression
25 cũng ngụ ý
RETURN expression
77

RETURN expression
78

Kiểu dữ liệu của một cột đầu ra trong cú pháp

RETURN expression
25

RETURN expression
70

Tên của ngôn ngữ mà chức năng được thực hiện trong. Nó có thể là

RETURN expression
71,
RETURN expression
72,
RETURN expression
73 hoặc tên của ngôn ngữ thủ tục do người dùng định nghĩa, e. g. ,
RETURN expression
74. Giá trị mặc định là
RETURN expression
71 nếu chỉ định
RETURN expression
76. Đặt tên trong dấu nháy đơn không được dùng nữa và yêu cầu viết hoa chữ thường

RETURN expression
77 } [,. ] }

Danh sách chuyển đổi một cuộc gọi đến chức năng nên được áp dụng. Biến đổi chuyển đổi giữa các loại SQL và các loại dữ liệu dành riêng cho ngôn ngữ; . Việc triển khai ngôn ngữ thủ tục thường có kiến ​​thức được mã hóa cứng về các loại tích hợp sẵn, vì vậy chúng không cần được liệt kê ở đây. Nếu việc triển khai ngôn ngữ thủ tục không biết cách xử lý một loại và không có biến đổi nào được cung cấp, nó sẽ quay trở lại hành vi mặc định để chuyển đổi các loại dữ liệu, nhưng điều này phụ thuộc vào việc triển khai

RETURN expression
78

RETURN expression
78 chỉ ra rằng chức năng này là chức năng cửa sổ chứ không phải chức năng đơn giản. Điều này hiện chỉ hữu ích cho các chức năng được viết bằng C. Không thể thay đổi thuộc tính
RETURN expression
78 khi thay thế định nghĩa hàm hiện có

RETURN expression
81
RETURN expression
82
RETURN expression
83

Các thuộc tính này thông báo cho trình tối ưu hóa truy vấn về hành vi của hàm. Nhiều nhất một lựa chọn có thể được chỉ định. Nếu không có cái nào trong số này xuất hiện, thì

RETURN expression
83 là giả định mặc định

RETURN expression
81 chỉ ra rằng hàm không thể sửa đổi cơ sở dữ liệu và luôn trả về cùng một kết quả khi đưa ra các giá trị đối số giống nhau; . Nếu tùy chọn này được đưa ra, bất kỳ lệnh gọi hàm nào có đối số toàn hằng có thể được thay thế ngay lập tức bằng giá trị hàm

RETURN expression
82 chỉ ra rằng hàm không thể sửa đổi cơ sở dữ liệu và trong một lần quét bảng duy nhất, hàm sẽ luôn trả về cùng một kết quả cho cùng các giá trị đối số, nhưng kết quả của nó có thể thay đổi qua các câu lệnh SQL. Đây là lựa chọn thích hợp cho các hàm có kết quả phụ thuộc vào tra cứu cơ sở dữ liệu, các biến tham số [chẳng hạn như múi giờ hiện tại], v.v. [Không phù hợp với trình kích hoạt
RETURN expression
87 muốn truy vấn các hàng được sửa đổi bởi lệnh hiện tại. ] Cũng lưu ý rằng họ hàm
RETURN expression
88 đủ điều kiện là ổn định, vì giá trị của chúng không thay đổi trong một giao dịch

RETURN expression
83 chỉ ra rằng giá trị hàm có thể thay đổi ngay cả trong một lần quét bảng, do đó không thể thực hiện tối ưu hóa. Theo nghĩa này, tương đối ít chức năng cơ sở dữ liệu dễ bay hơi; . Nhưng lưu ý rằng bất kỳ chức năng nào có tác dụng phụ phải được phân loại là không ổn định, ngay cả khi kết quả của nó khá dễ đoán, để ngăn chặn các cuộc gọi được tối ưu hóa;

Để biết thêm chi tiết, hãy xem Phần 38. 7

RETURN expression
74

RETURN expression
74 chỉ ra rằng chức năng không có tác dụng phụ. Nó không tiết lộ thông tin nào về các đối số của nó ngoài giá trị trả về của nó. Ví dụ: một hàm đưa ra thông báo lỗi cho một số giá trị đối số nhưng không đưa ra thông báo lỗi khác hoặc bao gồm các giá trị đối số trong bất kỳ thông báo lỗi nào, thì không bị rò rỉ. Điều này ảnh hưởng đến cách hệ thống thực thi các truy vấn đối với các dạng xem được tạo bằng tùy chọn
RETURN expression
76 hoặc các bảng có bật bảo mật cấp hàng. Hệ thống sẽ thực thi các điều kiện từ chính sách bảo mật và chế độ xem hàng rào bảo mật trước bất kỳ điều kiện nào do người dùng cung cấp từ chính truy vấn có chứa các chức năng không chống rò rỉ, nhằm ngăn chặn việc vô tình làm lộ dữ liệu. Các chức năng và toán tử được đánh dấu là chống rò rỉ được giả định là đáng tin cậy và có thể được thực thi trước các điều kiện từ chính sách bảo mật và chế độ xem hàng rào bảo mật. Ngoài ra, các hàm không nhận đối số hoặc không được truyền bất kỳ đối số nào từ chế độ xem hoặc bảng hàng rào bảo mật không cần phải được đánh dấu là chống rò rỉ để được thực thi trước các điều kiện bảo mật. Xem TẠO CHẾ ĐỘ XEM và Phần 41. 5. Tùy chọn này chỉ có thể được đặt bởi siêu người dùng

RETURN expression
77
RETURN expression
78
RETURN expression
79

RETURN expression
77 [mặc định] chỉ ra rằng hàm sẽ được gọi bình thường khi một số đối số của nó là null. Sau đó, trách nhiệm của tác giả chức năng là kiểm tra các giá trị null nếu cần và phản hồi một cách thích hợp

RETURN expression
78 hoặc
RETURN expression
79 chỉ ra rằng hàm luôn trả về null bất cứ khi nào bất kỳ đối số nào của nó là null. Nếu tham số này được chỉ định, hàm sẽ không được thực thi khi có đối số null;

RETURN expression
03
RETURN expression
04

RETURN expression
05 chỉ ra rằng chức năng sẽ được thực thi với các đặc quyền của người dùng gọi nó. Đó là mặc định.
RETURN expression
06 chỉ định rằng chức năng sẽ được thực thi với các đặc quyền của người dùng sở hữu nó

Từ khóa

RETURN expression
07 được cho phép để tuân thủ SQL, nhưng nó là tùy chọn vì không giống như trong SQL, tính năng này áp dụng cho tất cả các chức năng không chỉ các chức năng bên ngoài

RETURN expression
08

RETURN expression
09 chỉ ra rằng chức năng không thể được thực thi ở chế độ song song và sự hiện diện của một chức năng như vậy trong câu lệnh SQL buộc một kế hoạch thực hiện nối tiếp. Đây là mặc định.
RETURN expression
00 chỉ ra rằng chức năng có thể được thực thi ở chế độ song song, nhưng việc thực thi bị hạn chế đối với trưởng nhóm song song.
RETURN expression
01 chỉ ra rằng chức năng an toàn để chạy ở chế độ song song mà không bị hạn chế

Các chức năng phải được gắn nhãn không an toàn song song nếu chúng sửa đổi bất kỳ trạng thái cơ sở dữ liệu nào hoặc nếu chúng thực hiện các thay đổi đối với giao dịch chẳng hạn như sử dụng giao dịch phụ hoặc nếu chúng truy cập vào các chuỗi hoặc cố gắng thực hiện các thay đổi liên tục đối với cài đặt [e. g. ,

RETURN expression
02]. Chúng phải được gắn nhãn là bị hạn chế song song nếu chúng truy cập các bảng tạm thời, trạng thái kết nối máy khách, con trỏ, câu lệnh đã chuẩn bị hoặc trạng thái cục bộ phụ trợ linh tinh mà hệ thống không thể đồng bộ hóa ở chế độ song song [e. g. ,
RETURN expression
03 không thể được thực hiện ngoài trưởng nhóm vì thay đổi được thực hiện bởi quy trình khác sẽ không được phản ánh trong trưởng nhóm]. Nói chung, nếu một chức năng được gắn nhãn là an toàn khi nó bị hạn chế hoặc không an toàn, hoặc nếu nó được gắn nhãn là bị hạn chế khi nó thực sự không an toàn, thì nó có thể đưa ra lỗi hoặc đưa ra câu trả lời sai khi được sử dụng trong truy vấn song song. Về lý thuyết, các chức năng của ngôn ngữ C có thể thể hiện hành vi hoàn toàn không xác định nếu bị gắn nhãn sai, vì hệ thống không có cách nào tự bảo vệ mình trước mã C tùy ý, nhưng trong hầu hết các trường hợp, kết quả sẽ không tệ hơn bất kỳ chức năng nào khác. Nếu nghi ngờ, các chức năng phải được gắn nhãn là
RETURN expression
04, đây là giá trị mặc định

RETURN expression
05
RETURN expression
06

Một số dương cho biết chi phí thực thi ước tính cho hàm, theo đơn vị cpu_operator_cost. Nếu hàm trả về một tập hợp, đây là chi phí cho mỗi hàng được trả về. Nếu chi phí không được chỉ định, 1 đơn vị được giả định cho ngôn ngữ C và các chức năng nội bộ và 100 đơn vị cho các chức năng trong tất cả các ngôn ngữ khác. Các giá trị lớn hơn khiến người lập kế hoạch cố gắng tránh đánh giá chức năng thường xuyên hơn mức cần thiết

RETURN expression
07
RETURN expression
08

Một số dương cho biết số hàng ước tính mà người lập kế hoạch sẽ mong đợi hàm trả về. Điều này chỉ được phép khi hàm được khai báo trả về một tập hợp. Giả định mặc định là 1000 hàng

RETURN expression
09
RETURN expression
10

Tên [tùy chọn đủ điều kiện lược đồ] của chức năng hỗ trợ trình lập kế hoạch để sử dụng cho chức năng này. Xem Phần 38. 11 để biết chi tiết. Bạn phải là siêu người dùng để sử dụng tùy chọn này

RETURN expression
11
RETURN expression
12

Mệnh đề

RETURN expression
13 làm cho tham số cấu hình đã chỉ định được đặt thành giá trị đã chỉ định khi chức năng được nhập, sau đó được khôi phục về giá trị trước đó khi chức năng thoát.
RETURN expression
14 lưu giá trị của tham số hiện tại khi
RETURN expression
3 được thực thi dưới dạng giá trị được áp dụng khi hàm được nhập

Nếu một mệnh đề

RETURN expression
13 được gắn vào một hàm, thì hiệu ứng của lệnh
RETURN expression
17 được thực thi bên trong hàm đối với cùng một biến sẽ bị hạn chế đối với hàm đó. giá trị trước đó của tham số cấu hình vẫn được khôi phục khi thoát chức năng. Tuy nhiên, một lệnh
RETURN expression
13 thông thường [không có
RETURN expression
19] sẽ ghi đè mệnh đề
RETURN expression
13, giống như lệnh
RETURN expression
17 trước đó. hiệu ứng của một lệnh như vậy sẽ vẫn tồn tại sau khi thoát khỏi chức năng, trừ khi giao dịch hiện tại được khôi phục

Xem SET và Chương 20 để biết thêm thông tin về tên và giá trị thông số được phép

RETURN expression
22

Một hằng chuỗi xác định hàm; . Nó có thể là tên hàm bên trong, đường dẫn đến tệp đối tượng, lệnh SQL hoặc văn bản bằng ngôn ngữ thủ tục

Việc sử dụng báo giá bằng đô la thường hữu ích [xem Phần 4. 1. 2. 4] để viết chuỗi định nghĩa hàm, thay vì cú pháp trích dẫn đơn bình thường. Không có trích dẫn đô la, bất kỳ dấu ngoặc đơn hoặc dấu gạch chéo ngược nào trong định nghĩa hàm phải được thoát bằng cách nhân đôi chúng

RETURN expression
23,
RETURN expression
24

Dạng mệnh đề

RETURN expression
25 này được sử dụng cho các hàm ngôn ngữ C có thể tải động khi tên hàm trong mã nguồn ngôn ngữ C không giống với tên của hàm SQL. Chuỗi
RETURN expression
26 là tên của file thư viện dùng chung chứa hàm C đã biên dịch, được hiểu như đối với lệnh
RETURN expression
27. Chuỗi
RETURN expression
24 là ký hiệu liên kết của hàm, nghĩa là tên của hàm trong mã nguồn ngôn ngữ C. Nếu biểu tượng liên kết bị bỏ qua, nó được coi là giống với tên của hàm SQL được xác định. Tên C của tất cả các hàm phải khác nhau, vì vậy bạn phải đặt cho các hàm C quá tải các tên C khác nhau [ví dụ: sử dụng các loại đối số như một phần của tên C]

Khi các cuộc gọi

RETURN expression
3 lặp đi lặp lại đề cập đến cùng một tệp đối tượng, tệp chỉ được tải một lần mỗi phiên. Để dỡ và tải lại tệp [có thể trong quá trình phát triển], hãy bắt đầu một phiên mới

RETURN expression
76

Phần thân của hàm

RETURN expression
31. Đây có thể là một tuyên bố duy nhất

RETURN expression

hoặc một khối

BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END

Điều này tương tự như viết văn bản của thân hàm dưới dạng hằng chuỗi [xem

RETURN expression
22 ở trên], nhưng có một số khác biệt. Dạng này chỉ dùng được cho
RETURN expression
31, dạng hằng chuỗi dùng được cho mọi ngôn ngữ. Dạng này được phân tích cú pháp tại thời điểm định nghĩa hàm, dạng hằng chuỗi được phân tích cú pháp tại thời điểm thực thi; . Biểu mẫu này theo dõi sự phụ thuộc giữa hàm và các đối tượng được sử dụng trong phần thân hàm, do đó,
RETURN expression
34 sẽ hoạt động chính xác, trong khi biểu mẫu sử dụng chuỗi ký tự có thể để lại các hàm lơ lửng. Cuối cùng, biểu mẫu này tương thích hơn với tiêu chuẩn SQL và các triển khai SQL khác

quá tải

PostgreSQL cho phép nạp chồng hàm; . Cho dù bạn có sử dụng nó hay không, khả năng này đòi hỏi các biện pháp phòng ngừa bảo mật khi gọi các chức năng trong cơ sở dữ liệu nơi một số người dùng không tin tưởng những người dùng khác; . 3

Hai hàm được coi là giống nhau nếu chúng có cùng tên và kiểu đối số đầu vào, bỏ qua mọi tham số

RETURN expression
8. Vì vậy, ví dụ những tuyên bố xung đột

RETURN expression
2

Các chức năng có danh sách loại đối số khác nhau sẽ không được coi là xung đột tại thời điểm tạo, nhưng nếu các giá trị mặc định được cung cấp thì chúng có thể xung đột khi sử dụng. Ví dụ, xem xét

RETURN expression
7

Cuộc gọi

RETURN expression
36 sẽ không thành công do sự mơ hồ về chức năng nào sẽ được gọi

ghi chú

Cú pháp kiểu SQL đầy đủ được phép khai báo các đối số và giá trị trả về của hàm. Tuy nhiên, các công cụ sửa đổi loại được đặt trong ngoặc đơn [e. g. , trường độ chính xác cho loại

RETURN expression
37] bị loại bỏ bởi
RETURN expression
3. Do đó, ví dụ
RETURN expression
39 hoàn toàn giống với
RETURN expression
40

Khi thay thế một chức năng hiện có bằng

RETURN expression
4, có những hạn chế về việc thay đổi tên tham số. Bạn không thể thay đổi tên đã được gán cho bất kỳ tham số đầu vào nào [mặc dù bạn có thể thêm tên cho các tham số chưa có trước đó]. Nếu có nhiều hơn một tham số đầu ra, bạn không thể thay đổi tên của các tham số đầu ra, vì điều đó sẽ thay đổi tên cột của loại hỗn hợp ẩn danh mô tả kết quả của hàm. Những hạn chế này được thực hiện để đảm bảo rằng các lời gọi hàm hiện tại không ngừng hoạt động khi nó được thay thế

Nếu một hàm được khai báo là

RETURN expression
79 với đối số
BEGIN ATOMIC
  statement;
  statement;
  ...
  statement;
END
9, kiểm tra tính nghiêm ngặt sẽ kiểm tra xem toàn bộ mảng variadic có khác rỗng không. Hàm sẽ vẫn được gọi nếu mảng có các phần tử null

ví dụ

Cộng hai số nguyên bằng hàm SQL

RETURN expression
7

Hàm tương tự được viết theo kiểu tuân thủ SQL hơn, sử dụng tên đối số và phần thân không được trích dẫn

RETURN expression
7
RETURN expression
8

Trả về một bản ghi chứa nhiều tham số đầu ra

RETURN expression
7

Bạn có thể làm điều tương tự chi tiết hơn với một loại hỗn hợp được đặt tên rõ ràng

RETURN expression
0

Một cách khác để trả về nhiều cột là sử dụng hàm

RETURN expression
44

RETURN expression
0

Tuy nhiên, một hàm

RETURN expression
44 khác với các ví dụ trước, bởi vì nó thực sự trả về một tập hợp các bản ghi, không chỉ một bản ghi

Viết các hàm
RETURN expression
06 một cách an toàn

Bởi vì chức năng

RETURN expression
06 được thực thi với các đặc quyền của người dùng sở hữu nó, nên cần cẩn thận để đảm bảo rằng chức năng này không thể bị lạm dụng. Để bảo mật, search_path phải được đặt để loại trừ mọi lược đồ có thể ghi bởi người dùng không đáng tin cậy. Điều này ngăn người dùng độc hại tạo đối tượng [e. g. , bảng, hàm và toán tử] che dấu các đối tượng dự định sẽ được sử dụng bởi hàm. Đặc biệt quan trọng về vấn đề này là lược đồ bảng tạm thời, lược đồ này được tìm kiếm đầu tiên theo mặc định và thường được ghi bởi bất kỳ ai. Có thể thu được một sự sắp xếp an toàn bằng cách buộc lược đồ tạm thời được tìm kiếm lần cuối. Để làm điều này, viết
RETURN expression
48 là mục cuối cùng trong
RETURN expression
49. Chức năng này minh họa cách sử dụng an toàn

RETURN expression
1

Mục đích của chức năng này là truy cập một bảng

RETURN expression
50. Nhưng nếu không có mệnh đề
RETURN expression
13, hoặc với mệnh đề
RETURN expression
13 chỉ đề cập đến
RETURN expression
53, hàm có thể bị đảo ngược bằng cách tạo một bảng tạm thời có tên là
RETURN expression
54

Trước PostgreSQL phiên bản 8. 3, mệnh đề

RETURN expression
13 không có sẵn và do đó, các chức năng cũ hơn có thể chứa logic khá phức tạp để lưu, đặt và khôi phục
RETURN expression
49. Mệnh đề
RETURN expression
13 dễ sử dụng hơn cho mục đích này

Một điểm khác cần lưu ý là theo mặc định, đặc quyền thực thi được cấp cho

RETURN expression
58 đối với các chức năng mới được tạo [xem Phần 5. 7 để biết thêm thông tin]. Thông thường, bạn sẽ muốn hạn chế việc sử dụng chức năng xác định bảo mật chỉ cho một số người dùng. Để làm điều đó, bạn phải thu hồi các đặc quyền
RETURN expression
58 mặc định và sau đó cấp đặc quyền thực thi một cách có chọn lọc. Để tránh có một cửa sổ trong đó tất cả mọi người đều có thể truy cập chức năng mới, hãy tạo nó và đặt các đặc quyền trong một giao dịch. Ví dụ

RETURN expression
2

khả năng tương thích

Lệnh

RETURN expression
3 được định nghĩa trong tiêu chuẩn SQL. Việc triển khai PostgreSQL có thể được sử dụng theo cách tương thích nhưng có nhiều tiện ích mở rộng. Ngược lại, tiêu chuẩn SQL chỉ định một số tính năng tùy chọn không được triển khai trong PostgreSQL

Sau đây là các vấn đề tương thích quan trọng

  • RETURN expression
    
    61 là một phần mở rộng PostgreSQL

  • Để tương thích với một số hệ thống cơ sở dữ liệu khác,

    BEGIN ATOMIC
      statement;
      statement;
      ...
      statement;
    END
    
    5 có thể được viết trước hoặc sau
    RETURN expression
    
    26. Nhưng chỉ có cách đầu tiên là tuân thủ tiêu chuẩn

  • Đối với các giá trị mặc định của tham số, tiêu chuẩn SQL chỉ xác định cú pháp với từ khóa

    RETURN expression
    
    64. Cú pháp với
    RETURN expression
    
    65 được sử dụng trong T-SQL và Firebird

  • Công cụ sửa đổi

    RETURN expression
    
    70 là một phần mở rộng PostgreSQL

  • Chỉ

    RETURN expression
    
    67 được chuẩn hóa thành ngôn ngữ

  • Tất cả các thuộc tính khác ngoại trừ

    RETURN expression
    
    77 và
    RETURN expression
    
    78 không được chuẩn hóa

  • Đối với phần thân của hàm

    RETURN expression
    
    31, tiêu chuẩn SQL chỉ xác định dạng
    RETURN expression
    
    76

Các hàm

RETURN expression
31 đơn giản có thể được viết theo cách vừa tuân thủ tiêu chuẩn vừa có thể di chuyển sang các triển khai khác. Các chức năng phức tạp hơn sử dụng các tính năng nâng cao, thuộc tính tối ưu hóa hoặc các ngôn ngữ khác nhất thiết sẽ dành riêng cho PostgreSQL theo một cách quan trọng

Chủ Đề