PostgreSQL: kèo bóng đá hôm | |||
---|---|---|---|
prev | UP | Chương 10. Loại chuyển đổi | Tiếp theo |
Hàm cụ thể được tham chiếu bởi lệnh gọi hàm được xác định bằng quy trình sau.
Độ phân giải loại kèo bóng đá euro
Chọn các kèo bóng đá euro được xem xét từpg_proc
Danh mục hệ thống. Nếu tên hàm không có trình độ học sinh đã được sử dụng, kèo bóng đá euro hàm được xem xét là kèo bóng đá euro hàm có tên và số đối số phù hợp có thể nhìn thấy trong đường dẫn tìm kiếm hiện tại (xemPhần 5.8.3). Nếu một tên kèo bóng đá euro đủ điều kiện được đưa ra, chỉ xem xét các kèo bóng đá euro trong lược đồ được chỉ định.
Nếu đường dẫn tìm kiếm tìm thấy nhiều hàm của các loại đối số giống hệt nhau, chỉ có một hàm xuất hiện sớm nhất trong đường dẫn được xem xét. Các kèo bóng đá euro của các loại đối số khác nhau được xem xét trên một chân bình đẳng bất kể vị trí đường dẫn tìm kiếm.
Nếu kèo bóng đá euro hàm được khai báo bằngVariadictham số mảng và cuộc gọi không sử dụngVariadic11501_11924
Điều này tạo ra nguy cơ bảo mật khi gọi, thông qua tên đủ điều kiện[1], một hàm variadic được tìm thấy trong một lược đồ cho phép người dùng không tin tưởng để tạo các đối tượng. Một người dùng độc hại có thể kiểm soát và thực thi các kèo bóng đá euro SQL tùy ý như thể bạn thực thi chúng. Thay thế một cuộc gọi mang theoVariadicTừ khóa, bỏ qua mối nguy hiểm này. Cuộc gọi dân cưVariadic "Any"tham số thường không có công thức tương đương chứaVariadic12571_12683
Các hàm có giá trị mặc định cho các tham số được coi là phù hợp với bất kỳ cuộc gọi nào bỏ qua 0 hoặc nhiều hơn các vị trí tham số mặc định. Nếu nhiều hơn một kèo bóng đá euro như vậy khớp với một cuộc gọi, thì mô phỏng xuất hiện sớm nhất trong đường dẫn tìm kiếm được sử dụng. Nếu có hai hoặc nhiều kèo bóng đá euro như vậy trong cùng một lược đồ với các loại tham số giống hệt nhau ở các vị trí không bị lỗi (có thể nếu chúng có các tập hợp các tham số có thể mặc định khác nhau), hệ thống sẽ không thể xác định được điều gì sẽ thích, và vì vậy"Gọi kèo bóng đá euro mơ hồ"Lỗi sẽ kết quả nếu không thể tìm thấy tốt hơn với cuộc gọi.
Điều này tạo ra nguy cơ có sẵn khi gọi, thông qua tên đủ điều kiện[1], bất kỳ kèo bóng đá euro nào được tìm thấy trong một lược đồ cho phép người dùng không tin tưởng để tạo các đối tượng. Người dùng độc hại có thể tạo một kèo bóng đá euro với tên của một hàm hiện có, sao chép các tham số của hàm đó và nối thêm các tham số mới có giá trị mặc định. Điều này ngăn cản các cuộc gọi mới đến kèo bóng đá euro ban đầu. Đối với nguy cơ này, đặt các kèo bóng đá euro trong các lược đồ chỉ cho phép người dùng đáng tin cậy tạo đối tượng.
Kiểm tra kèo bóng đá euro chấp nhận chính xác các loại đối số đầu vào. Nếu một người tồn tại (chỉ có thể có một khớp chính xác trong tập hợp các kèo bóng đá euro được xem xét), hãy sử dụng nó. Thiếu một trận đấu chính xác tạo ra mối nguy hiểm bảo mật khi gọi, thông qua tên đủ điều kiện[1], một hàm được tìm thấy trong một lược đồ cho phép người dùng không tin tưởng tạo kèo bóng đá euro đối tượng. Trong những tình huống như vậy, kèo bóng đá euro cuộc tranh luận để buộc một trận đấu chính xác. (kèo bóng đá euro trường hợp liên quan đếnkhông xác địnhSẽ không bao giờ tìm thấy kèo bóng đá euro trận đấu ở bước này.)
Nếu không tìm thấy khớp chính xác nào, hãy xem liệu cuộc gọi kèo bóng đá euro có phải là một yêu cầu chuyển đổi loại đặc biệt hay không. Điều này xảy ra nếu cuộc gọi hàm chỉ có một đối số và tên hàm giống như tên (nội bộ) của một số loại dữ liệu. Hơn nữa, đối số hàm phải là một loại chữ chưa biết hoặc một loại có thể sử dụng được cho loại dữ liệu được đặt tên hoặc một loại có thể được chuyển đổi thành loại dữ liệu được đặt tên bằng cách áp dụng các hàm I/O của loại đó (nghĩa là chuyển đổi là hoặc từ một trong một trong các loại chuỗi tiêu chuẩn). Khi các điều kiện này được đáp ứng, cuộc gọi kèo bóng đá euro được coi là một dạng củaCastĐặc điểm kỹ thuật.[2]
Tìm kiếm trận đấu tốt nhất.
15416_15550không xác địnhnghĩa đen được coi là có thể chuyển đổi thành bất cứ điều gì cho mục đích này. Nếu chỉ còn kèo bóng đá euro ứng cử viên, hãy sử dụng nó; khác tiếp tục bước tiếp theo.
Nếu bất kỳ đối số đầu vào nào thuộc loại miền, hãy coi nó là loại cơ sở của miền cho tất cả các bước tiếp theo. Điều này đảm bảo rằng các miền hoạt động giống như các loại cơ sở của chúng cho mục đích phân giải kèo bóng đá euro mơ hồ.
15992_16198
Chạy qua tất cả kèo bóng đá euro ứng cử viên và giữ những người chấp nhận kèo bóng đá euro loại ưa thích (thuộc loại loại dữ liệu đầu vào) ở hầu hết kèo bóng đá euro vị trí mà sẽ cần chuyển đổi loại. Giữ tất cả kèo bóng đá euro ứng cử viên nếu không chấp nhận kèo bóng đá euro loại ưa thích. Nếu chỉ còn một ứng cử viên, hãy sử dụng nó; khác tiếp tục bước tiếp theo.
Nếu có bất kỳ đối số đầu vào nào làkhông xác định, Kiểm tra kèo bóng đá euro loại loại được chấp nhận tại kèo bóng đá euro vị trí đối số đó bởi kèo bóng đá euro ứng cử viên còn lại. Ở mỗi vị trí, chọnchuỗi16762_17415
Nếu có cả haikhông xác địnhvà kèo bóng đá euro đối số kiểu đã biết, và tất cả kèo bóng đá euro đối số kiểu đã biết có cùng loại, giả sử rằngkhông xác địnhĐối số cũng thuộc loại đó và kiểm tra ứng viên nào có thể chấp nhận loại đó tạikhông xác định17735_17825
Lưu ý rằng"Kết hợp tốt nhất"Các quy tắc giống hệt nhau cho phân giải toán tử và loại kèo bóng đá euro. Một số ví dụ theo sau.
Ví dụ 10-6. kèo bóng đá euro làm tròn phân giải loại đối số
Chỉ có kèo bóng đá eurovòng
Hàm có hai đối số; nó có kèo bóng đá euro đối số đầu tiên của loạiSốvà đối số thứ hai của loạiSố nguyên. Vì vậy, truy vấn sau tự động chuyển đổi đối số đầu tiên của loạiSố nguyênđếnSố:
Chọn Vòng (4, 4); tròn -------- 4.0000 (1 hàng)
Truy vấn đó thực sự được trình phân tích cú pháp thành:
Chọn Vòng (Cast (4 là Số), 4);
Vì kèo bóng đá euro hằng số số có kèo bóng đá euro điểm thập phân ban đầu được gán loạiSố, Truy vấn sau sẽ không yêu cầu chuyển đổi loại và do đó có thể hiệu quả hơn kèo bóng đá euro chút:
Chọn Vòng (4.0, 4);
Ví dụ 10-7. Độ phân giải kèo bóng đá euro Variadic
19100_19219
Hàm này chấp nhận, nhưng không yêu cầu, từ khóa variadic. Nó dung nạp cả đối số số nguyên và số:
Chọn công khai.variadic_example (0), public.variadic_example (0,0), public.variadic_example (mảng variadic [0,0]); variadic_example | variadic_example | variadic_example ------------------+------------------+---------------------- 1 | 1 | 1 (1 hàng)
Tuy nhiên, cuộc gọi thứ nhất và thứ hai sẽ thích các kèo bóng đá euro cụ thể hơn, nếu có:
Tạo kèo bóng đá euro công khai.variadic_example (số) Trả về int int Ngôn ngữ SQL là 'Chọn 2'; Tạo kèo bóng đá euro Tạo kèo bóng đá euro public.variadic_example (int) trả về int Ngôn ngữ SQL là 'Chọn 3'; Tạo kèo bóng đá euro Chọn public.variadic_example (0), public.variadic_example (0,0), public.variadic_example (mảng variadic [0,0]); variadic_example | variadic_example | variadic_example ------------------+------------------+---------------------- 3 | 2 | 1 (1 hàng)
Cho cấu hình mặc định và chỉ có hàm đầu tiên hiện có, cuộc gọi thứ nhất và thứ hai là không an toàn. Bất kỳ người dùng nào cũng có thể chặn họ bằng cách tạo kèo bóng đá euro thứ hai hoặc thứ ba. Bằng cách khớp chính xác loại đối số và sử dụngVariadicTừ khóa, cuộc gọi thứ ba được bảo mật.
Ví dụ 10-8. Độ phân giải loại kèo bóng đá euro con
Có kèo bóng đá euro sốchuỗi con
Các kèo bóng đá euro, một trong số đó lấy các loạiText20869_20876Số nguyên. Nếu được gọi với hằng số chuỗi thuộc loại không xác định, hệ thống chọn hàm ứng cử viên chấp nhận đối số của danh mục ưa thíchchuỗi(cụ thể là loạiText).
chọn chuỗi con ('1234', 3); Chất nền -------- 34 (1 hàng)
Nếu chuỗi được khai báo là loạiVarchar, như có thể là trường hợp nếu nó đến từ kèo bóng đá euro bảng, thì trình phân tích cú pháp sẽ cố gắng chuyển đổi nó để trở thànhText:
chọn chuỗi con (varchar '1234', 3); Chất nền -------- 34 (1 hàng)
Điều này được chuyển đổi bởi trình phân tích cú pháp để trở thành kèo bóng đá euro cách hiệu quả:
chọn Subrtr (cast (varchar '1234' làm văn bản), 3);
Lưu ý:trình phân tích cú pháp học từpg_castDanh mục đóTextvàVarchartương thích nhị phân, có nghĩa là người ta có thể được chuyển đến kèo bóng đá euro hàm chấp nhận cái kia mà không thực hiện bất kỳ chuyển đổi vật lý nào. Do đó, không có cuộc gọi chuyển đổi loại nào thực sự được chèn trong trường hợp này.
và, nếu hàm được gọi với đối số loạiSố nguyên, trình phân tích cú pháp sẽ cố gắng chuyển đổi nó thànhText:
chọn chuỗi con (1234, 3); Lỗi: kèo bóng đá euro Subr (Integer, Integer) không tồn tại Gợi ý: Không có kèo bóng đá euro phù hợp với tên và loại đối số đã cho. Bạn có thể cần Để thêm các loại loại rõ ràng.
Điều này không hoạt động vìSố nguyênkhông có diễn viên ngầm choText. kèo bóng đá euro dàn diễn viên rõ ràng sẽ hoạt động, tuy nhiên:
chọn Subrtr (cast (1234 dưới dạng văn bản), 3); Chất nền -------- 34 (1 hàng)
[1] |
23062_23220mẫu sử dụng lược đồ an toàn. |
[2] |
23526_23786Tạo Castđể bình luận bổ sung. |