Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá hôm nay và ngày mai phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

35.4. Truy vấn kèo bóng đá hôm nay và ngày mai ngữ (kèo bóng đá hôm nay và ngày mai) Chức năng

kèo bóng đá hôm nay và ngày mai SQL thực thi danh sách các câu lệnh SQL tùy ý, Trả lại kết quả của truy vấn cuối cùng trong danh sách. Trong đơn giản (không đặt) trường hợp, hàng đầu tiên của kết quả truy vấn cuối cùng sẽ là trả lại. (Hãy nhớ rằng"Đầu tiên hàng ngang"của kết quả đa dòng không được xác định rõ ràng trừ khi bạn sử dụngĐặt hàng bởi.) Nếu kèo bóng đá hôm nay và ngày mai cuối cùng xảy ra Để trả về không có hàng nào, giá trị null sẽ được trả về.

Ngoài ra, một kèo bóng đá hôm nay và ngày mai SQL có thể được khai báo để trả về a Đặt, bằng cách chỉ định loại trả về của chức năng làsetofanyype, hoặc tương đương bằng cách khai báo nó làTrả về BÀN(cột). Trong trường hợp này Tất cả các hàng của kết quả kèo bóng đá hôm nay và ngày mai cuối cùng được trả về. Thông tin chi tiết xuất hiện bên dưới.

Phần thân của kèo bóng đá hôm nay và ngày mai SQL phải là danh sách các câu lệnh SQL tách biệt bởi dấu chấm phẩy. Một dấu chấm phẩy sau tuyên bố cuối cùng là không bắt buộc. Trừ khi kèo bóng đá hôm nay và ngày mai được tuyên bố trả lạivoid, câu lệnh cuối cùng phải làChọnhoặc mộtChèn, Cập nhậthoặcXóaTrở vềmệnh đề.

bất kỳ bộ sưu tập nào trongkèo bóng đá hôm nay và ngày maiNgôn ngữ có thể được đóng gói cùng nhau và được định nghĩa là một kèo bóng đá hôm nay và ngày mai. Bên cạnh đóChọnkèo bóng đá hôm nay và ngày mai, các lệnh có thể bao gồm các kèo bóng đá hôm nay và ngày mai sửa đổi dữ liệu (Chèn, Cập nhậtXóa), như cũng như các lệnh kèo bóng đá hôm nay và ngày mai khác. (Ngoại lệ duy nhất là bạn Không thể đặtbắt đầu, cam kết, rollbackhoặcSavePointlệnh thành Akèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai.) Tuy nhiên, Lệnh cuối cùng phải làChọnhoặc cóTrở vềmệnh đề trả về bất cứ thứ gì được chỉ định là loại trả về của kèo bóng đá hôm nay và ngày mai. Ngoài ra, nếu bạn muốn xác định chức năng SQL thực hiện các hành động nhưng không có giá trị hữu ích để trả về, bạn có thể định nghĩa nó là trả vềvoid. Ví dụ: chức năng này loại bỏ kèo bóng đá hôm nay và ngày mai hàng với Mức lương âm từEMPBảng:

Tạo chức năng Clean_emp () trả về void As '
    Xóa khỏi EMP
        Trong đó tiền lương <0;
'Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Chọn Clean_emp ();

 Clean_emp
-----------

(1 hàng)

Cú pháp củaTạo chức năngLệnh yêu cầu cơ thể chức năng được viết dưới dạng chuỗi không thay đổi. Thường thuận tiện nhất khi sử dụng báo giá đô la (nhìn thấyPhần 4.1.2.4) cho hằng số chuỗi. Nếu bạn chọn sử dụng Cú pháp không đổi chuỗi một chuỗi được trích xuất thông thường, bạn phải tăng gấp đôi dấu ngoặc đơn (') và dấu gạch chéo ngược (\) (Giả sử cú pháp chuỗi thoát) trong phần thân của chức năng (xemPhần 4.1.2.1).

Đối số cho kèo bóng đá hôm nay và ngày mai SQL được tham chiếu trong kèo bóng đá hôm nay và ngày mai cơ thể sử dụng cú pháp$n: $ 1đề cập đến Đối với đối số đầu tiên,$ 2đến lần thứ hai, Và như vậy. Nếu một đối số thuộc loại tổng hợp, thì dấu chấm ký hiệu, ví dụ:$ 1.name, có thể được sử dụng để Các thuộc tính kèo bóng đá hôm nay và ngày mai cập của đối số. Các đối số chỉ có thể được sử dụng như giá trị dữ liệu, không phải là định danh. Vì vậy, ví dụ đây là hợp lý:

Chèn vào kèo bóng đá hôm nay và ngày mai giá trị MyTable ($ 1);

Nhưng điều này sẽ không hoạt động:

Chèn vào kèo bóng đá hôm nay và ngày mai giá trị $ 1 ​​(42);

35.4.1.kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai chức năng trên kèo bóng đá hôm nay và ngày mai loại cơ sở

đơn giản nhất có thểkèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai không có đối số và chỉ đơn giản là trả về một loại cơ sở, như vậy BẰNGSố nguyên:

Tạo kèo bóng đá hôm nay và ngày mai một () trả về số nguyên dưới dạng $$
    Chọn 1 kết quả;
$$ Ngôn ngữ SQL;

- Cú pháp thay thế cho chuỗi theo nghĩa đen:
Tạo kèo bóng đá hôm nay và ngày mai một () trả về số nguyên là '
    Chọn 1 kết quả;
'Ngôn ngữ SQL;

Chọn một ();

 một
-----
   1

Lưu ý rằng chúng tôi đã xác định một bí danh cột trong kèo bóng đá hôm nay và ngày mai cơ thể cho kết quả của kèo bóng đá hôm nay và ngày mai (với tênresult), nhưng bí danh cột này không hiển thị bên ngoài chức năng. Do đó, kết quả được dán nhãnmộtthay vìresult.

Nó gần như dễ dàng xác địnhkèo bóng đá hôm nay và ngày maiCác chức năng lấy các loại cơ sở làm lập luận. Trong ví dụ dưới đây, hãy chú ý cách chúng tôi đề cập đến Đối số trong kèo bóng đá hôm nay và ngày mai là$ 1$ 2.

Tạo kèo bóng đá hôm nay và ngày mai add_em (số nguyên, số nguyên) Trả về số nguyên dưới dạng $$
    Chọn $ 1 + $ 2;
$$ Ngôn ngữ SQL;

Chọn add_em (1, 2) làm câu trả lời;

 trả lời
--------
      3

Đây là một chức năng hữu ích hơn, có thể được sử dụng để ghi nợ Tài khoản ngân hàng:

Tạo kèo bóng đá hôm nay và ngày mai TF1 (Số nguyên, Số) Trả về Số nguyên là $$
    Cập nhật ngân hàng
        Đặt số dư = Số dư - $ 2
        Trong đó tài khoản = $ 1;
    Chọn 1;
$$ Ngôn ngữ SQL;

Người dùng có thể thực thi chức năng này để ghi nợ tài khoản 17 bằng cách $ 100,00 như sau:

Chọn TF1 (17, 100.0);

Trong thực tế, người ta có thể muốn một kết quả hữu ích hơn từ kèo bóng đá hôm nay và ngày mai hơn là hằng số 1, do đó có nhiều khả năng Định nghĩa là:

Tạo kèo bóng đá hôm nay và ngày mai TF1 (Số nguyên, số) Trả về số là $$
    Cập nhật ngân hàng
        Đặt số dư = Số dư - $ 2
        Trong đó tài khoản = $ 1;
    Chọn số dư từ ngân hàng nơi tài khoản = $ 1;
$$ Ngôn ngữ SQL;

Điều chỉnh số dư và trả về số dư mới. kèo bóng đá hôm nay và ngày mai điều tương tự có thể được thực hiện trong một lệnh bằng cách sử dụngTrở về:

Tạo kèo bóng đá hôm nay và ngày mai TF1 (Số nguyên, số) Trả về số là $$
    Cập nhật ngân hàng
        Đặt số dư = Số dư - $ 2
        WHERE ACCKNO = $ 1
    Trả lại số dư;
$$ Ngôn ngữ SQL;

35.4.2.kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai trên composite Loại

Khi viết kèo bóng đá hôm nay và ngày mai chức năng với kèo bóng đá hôm nay và ngày mai đối số của kèo bóng đá hôm nay và ngày mai loại tổng hợp, chúng tôi không chỉ chỉ định đối số nào chúng ta muốn (như chúng ta đã làm ở trên với$ 1$ 2) nhưng cũng là thuộc tính (trường) mong muốn của lập luận đó. Ví dụ: giả sử rằngEMPlà một bảng chứa dữ liệu nhân viên và Do đó cũng là tên của loại tổng hợp của mỗi hàng bàn. Đây là một chức năngdouble_salaryĐiều đó tính toán những gì ai đó Mức lương sẽ là nếu nó được nhân đôi:

Tạo bảng EMP (
    tên văn bản,
    số tiền lương,
    Số nguyên tuổi,
    quan điểm tủ
);

Chèn vào các giá trị EMP ('Bill', 4200, 45, '(2,1)');

Tạo chức năng double_salary (EMP) trả về số là $$
    Chọn $ 1.Salary * 2 làm tiền lương;
$$ Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Chọn tên, double_salary (emp.*) Là giấc mơ
    Từ EMP
    Trong đó emp.cubicle ~ = điểm '(2,1)';

 Tên | mơ
------+-------
 Hóa đơn |  8400

Lưu ý việc sử dụng cú pháp$ 1.SalaryĐể chọn một trường của đối số Giá trị hàng. Cũng chú ý cách gọiChọnLệnh sử dụng*Để chọn toàn bộ hàng hiện tại của bảng làm tổng hợp giá trị. Hàng bảng có thể được tham chiếu thay thế chỉ bằng cách sử dụng Tên bảng, như thế này:

Chọn tên, double_salary (emp) là giấc mơ
    Từ EMP
    Trong đó emp.cubicle ~ = point '(2,1)';

Nhưng việc sử dụng này không được dùng bối rối.

Đôi khi thật tiện dụng để xây dựng một đối số tổng hợp giá trị trên đường bay. Điều này có thể được thực hiện vớihàngXây dựng. Ví dụ, chúng tôi có thể điều chỉnh dữ liệu được kèo bóng đá hôm nay và ngày maiền đến chức năng:

Chọn tên, double_salary (hàng (tên, tiền lương*1.1, tuổi, tủ)) là giấc mơ
    Từ emp;

cũng có thể xây dựng một chức năng trả về loại tổng hợp. Đây là một ví dụ về một kèo bóng đá hôm nay và ngày mai trả về đơnEMPhàng:

Tạo kèo bóng đá hôm nay và ngày mai new_emp () trả về emp là $$
    Chọn Text 'none' làm tên,
        1000.0 là tiền lương,
        25 như tuổi,
        điểm '(2,2)' như tủ;
$$ Ngôn ngữ SQL;

Trong ví dụ này, chúng tôi đã chỉ định từng thuộc tính với giá trị không đổi, nhưng bất kỳ tính toán nào cũng có thể được thay thế cho kèo bóng đá hôm nay và ngày mai hằng số này.

Lưu ý hai điều quan trọng về việc xác định chức năng:

  • Thứ tự danh sách chọn trong kèo bóng đá hôm nay và ngày mai phải chính xác là Giống như cái trong đó các cột xuất hiện trong bảng liên kết với loại tổng hợp. (Đặt tên các cột, như Chúng tôi đã làm ở trên, không liên quan đến hệ thống.)

  • Bạn phải đánh máy kèo bóng đá hôm nay và ngày mai biểu thức để khớp với Định nghĩa của loại tổng hợp hoặc bạn sẽ gặp lỗi Như thế này:

    20901_20986
    

Một cách khác để xác định cùng một kèo bóng đá hôm nay và ngày mai là:

Tạo kèo bóng đá hôm nay và ngày mai new_emp () trả về emp là $$
    Chọn Hàng ('Không', 1000.0, 25, '(2,2)') :: Emp;
$$ Ngôn ngữ SQL;

Ở đây chúng tôi đã viết AChọnTrở lại Chỉ một cột duy nhất của loại tổng hợp chính xác. Đây không phải là thực sự tốt hơn trong tình huống này, nhưng nó là một sự thay thế tiện dụng trong một số trường hợp - ví dụ, nếu chúng ta cần tính toán kết quả bằng cách gọi một kèo bóng đá hôm nay và ngày mai khác trả về tổng hợp mong muốn giá trị.

Chúng ta có thể gọi chức năng này trực tiếp trong một trong hai cách:

Chọn new_emp ();

         new_emp
------------------------------
 (Không, 1000.0,25, "(2,2)")

Chọn * từ new_emp ();

 Tên | Mức lương | Tuổi | ống
------+--------+-----+---------
 Không có | 1000.0 |  25 | (2,2)

Cách thứ hai được mô tả đầy đủ hơn trongPhần 35.4.7.

Khi bạn sử dụng một kèo bóng đá hôm nay và ngày mai trả về loại tổng hợp, bạn Có thể chỉ muốn một trường (thuộc tính) từ kết quả của nó. Bạn có thể làm điều đó với cú pháp như thế này:

Chọn (new_emp ()). Tên;

 tên
------
 Không có

dấu ngoặc đơn cần thiết để giữ cho trình phân tích cú pháp khỏi bối rối. Nếu bạn cố gắng làm điều đó mà không có họ, bạn sẽ nhận được một cái gì đó như thế này:

Chọn new_emp (). Tên;
Lỗi: Lỗi cú pháp tại hoặc gần "."
Dòng 1: Chọn new_emp (). Tên;
                        ^

Một tùy chọn khác là sử dụng ký hiệu chức năng để trích xuất một thuộc tính. Cách đơn giản để giải thích điều này là chúng ta có thể sử dụng kèo bóng đá hôm nay và ngày mai ký hiệuthuộc tính (bảng)Bảng.Attributionthay thế cho nhau.

chọn tên (new_emp ());

 tên
------
 Không có
- Điều này giống như:
- Chọn emp.Name với tư cách là thanh niên từ emp ở nơi emp.age <30;

Chọn Tên (EMP) làm trẻ từ EMP nơi Age (EMP) <30;

 thanh niên
-----------
 Sam
 Andy

Tip:Sự tương đương giữa ký hiệu chức năng và ký hiệu thuộc tính cho phép sử dụng kèo bóng đá hôm nay và ngày mai chức năng Trên kèo bóng đá hôm nay và ngày mai loại tổng hợp để mô phỏng"Được tính toán kèo bóng đá hôm nay và ngày mai trường ". Ví dụ: sử dụng định nghĩa trước đó vìdouble_salary (emp), chúng ta có thể viết

chọn emp.name, emp.double_salary từ emp;

Một ứng dụng sử dụng điều này sẽ không cần phải trực tiếp nhận thức được rằngdouble_salarykhông phải là a Cột thực của bảng. (Bạn cũng có thể mô phỏng tính toán kèo bóng đá hôm nay và ngày mai trường có chế độ xem.)

Một cách khác để sử dụng kèo bóng đá hôm nay và ngày mai trả về loại tổng hợp là để chuyển kết quả cho một chức năng khác chấp nhận đúng Loại hàng làm đầu vào:

Tạo chức năng getName (EMP) Trả về văn bản dưới dạng $$
    Chọn $ 1.name;
$$ Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Chọn getName (new_emp ());
 GetName
---------
 Không có
(1 hàng)

Vẫn còn một cách khác để sử dụng kèo bóng đá hôm nay và ngày mai trả về tổng hợp Loại là gọi nó là kèo bóng đá hôm nay và ngày mai bảng, như được mô tả trongPhần 35.4.7.

35.4.3.kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai với tên tham số

Có thể đính kèm tên vào các tham số của kèo bóng đá hôm nay và ngày mai, Ví dụ

24780_24978

Ở đây tham số đầu tiên đã được đặt tênACCT_NOvà tham số thứ hai tênDebit. Cho đến nay là chức năng kèo bóng đá hôm nay và ngày mai Bản thân nó được quan tâm, những cái tên này chỉ là trang trí; Bạn phải Vẫn gọi các tham số là$ 1, $ 2, vv trong cơ thể chức năng. (Một số kèo bóng đá hôm nay và ngày mai ngữ thủ tục cho phép bạn sử dụng tên tham số Thay vào đó.) Tuy nhiên, việc gắn tên vào các tham số là hữu ích cho mục đích tài liệu. Khi một chức năng có nhiều tham số, nó cũng hữu ích khi sử dụng tên trong khi gọi chức năng, như được mô tả trongPhần 4.3.

35.4.4.kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai chức năng với đầu ra Tham số

Một cách khác để mô tả kết quả của kèo bóng đá hôm nay và ngày mai là Xác định nó vớitham số đầu ra, như Trong ví dụ này:

Tạo kèo bóng đá hôm nay và ngày mai add_em (in x int, in y int, out sum int)
Như 'Chọn $ 1 + $ 2'
Ngôn ngữ SQL;

Chọn add_em (3,7);
 add_em
--------
     10
(1 hàng)

Điều này về cơ bản không khác với phiên bảnadd_emhiển thị trongPhần 35.4.1. Giá trị thực của kèo bóng đá hôm nay và ngày mai tham số đầu ra là chúng cung cấp cách xác định kèo bóng đá hôm nay và ngày mai chức năng thuận tiện trả về một số cột. Ví dụ,

26640_26853

Điều gì đã xảy ra ở đây là chúng tôi đã tạo ra Một loại tổng hợp ẩn danh cho kết quả của kèo bóng đá hôm nay và ngày mai. Các Ví dụ trên có kết quả cuối cùng như

Tạo loại sum_prod AS (Sum int, sản phẩm int);

Tạo chức năng sum_n_product (int, int) trả về sum_prod
Như 'Chọn $ 1 + $ 2, $ 1 * $ 2'
Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Nhưng không phải bận tâm với loại tổng hợp riêng biệt Định nghĩa thường rất tiện dụng. Lưu ý rằng kèo bóng đá hôm nay và ngày mai tên được đính kèm kèo bóng đá hôm nay và ngày mai tham số đầu ra không chỉ trang trí mà còn xác định Tên cột của loại tổng hợp ẩn danh. (Nếu bạn bỏ qua Tên cho tham số đầu ra, hệ thống sẽ chọn tên trên chính nó.)

Lưu ý rằng các tham số đầu ra không được bao gồm trong Gọi danh sách đối số khi gọi một chức năng như vậy từ kèo bóng đá hôm nay và ngày mai. Điều này là bởi vìPostgreSQLchỉ xem xét kèo bóng đá hôm nay và ngày mai tham số đầu vào để xác định chức năng Gọi chữ ký. Điều đó cũng có nghĩa là chỉ có đầu vào tham số quan trọng khi tham chiếu chức năng cho mục đích chẳng hạn như bỏ nó. Chúng tôi có thể bỏ chức năng trên với hoặc của

chức năng thả sum_n_product (x int, y int, out sum int, out sản phẩm int);
Chức năng thả sum_n_product (int, int);

tham số có thể được đánh dấu làin(The mặc định),out, InouthoặcVariadic. MỘTInouttham số đóng vai trò là cả tham số đầu vào (một phần của danh sách đối số cuộc gọi) và tham số đầu ra (một phần của loại bản ghi kết quả).Variadictham số là tham số đầu vào, nhưng được đối xử đặc biệt như mô tả tiếp theo.

35.4.5.kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai chức năng với số lượng biến đổi của Đối số

kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai chức năng có thể tuyên bố chấp nhận số lượng biến số của kèo bóng đá hôm nay và ngày mai đối số, miễn là Tất cả"Tùy chọn"Đối số là của cùng loại dữ liệu. kèo bóng đá hôm nay và ngày mai đối số tùy chọn sẽ được chuyển cho chức năng như một mảng. Chức năng được khai báo bằng cách đánh dấu tham số cuối cùng làVariadic; cái này Tham số phải được khai báo là thuộc loại mảng. Vì ví dụ:

29417_29632

một cách hiệu quả, tất cả kèo bóng đá hôm nay và ngày mai đối số thực tế tại hoặc ngoàiVariadicVị trí được thu thập vào một mảng một chiều, như thể bạn đã viết

Chọn MLEAST (mảng [10, -1, 5, 4.4]);    - không hoạt động

Bạn thực sự không thể viết điều đó, mặc dù - hoặc ít nhất, nó sẽ không khớp với định nghĩa chức năng này. Một tham số được đánh dấuVariadicphù hợp với một hoặc nhiều Sự xuất hiện của loại phần tử của nó, không thuộc loại của riêng nó.

Đôi khi rất hữu ích khi có thể vượt qua Mảng đã được xây dựng cho một kèo bóng đá hôm nay và ngày mai biến đổi; Đây là đặc biệt tiện dụng khi một kèo bóng đá hôm nay và ngày mai variadic muốn truyền lại tham số mảng của nó đến một tham số khác. Bạn có thể làm điều đó bằng cách Chỉ địnhVariadicTrong cuộc gọi:

Chọn MLEAST (Mảng Variadic [10, -1, 5, 4.4]);

Điều này ngăn chặn việc mở rộng tham số variadic của kèo bóng đá hôm nay và ngày mai vào loại phần tử của nó, do đó cho phép đối số mảng giá trị để khớp bình thường.VariadicCó thể chỉ được gắn vào đối số thực tế cuối cùng của một kèo bóng đá hôm nay và ngày mai gọi.

Chỉ địnhVariadicTrong cuộc gọi là Ngoài ra, cách duy nhất để chuyển một mảng trống cho một variadic Chức năng, ví dụ:

Chọn MLEAST (Mảng Variadic [] :: Numeric []);

Đơn giản chỉ cần viếtChọn MLEAST ()không không hoạt động vì một tham số variadic phải khớp với ít nhất một lập luận thực tế. (Bạn có thể xác định chức năng thứ hai cũng có tênMLEAST, không có tham số, nếu bạn muốn cho phép kèo bóng đá hôm nay và ngày mai cuộc gọi đó.)

Các tham số phần tử mảng được tạo từ một variadic Tham số được coi là không có tên của riêng họ. Điều này có nghĩa là không thể gọi một kèo bóng đá hôm nay và ngày mai variadic bằng cách sử dụng Đối số được đặt tên (Phần 4.3), ngoại trừ khi nào bạn chỉ địnhVariadic. Ví dụ, Điều này sẽ hoạt động:

Chọn MLEAST (Variadic Arr: = Array [10, -1, 5, 4.4]);

Nhưng không phải sau:

Chọn MLEAST (ARR: = 10);
Chọn MLEAST (ARR: = mảng [10, -1, 5, 4.4]);

35.4.6.kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai chức năng với kèo bóng đá hôm nay và ngày mai giá trị mặc định cho Đối số

kèo bóng đá hôm nay và ngày mai chức năng có thể được khai báo với kèo bóng đá hôm nay và ngày mai giá trị mặc định cho một số hoặc Tất cả kèo bóng đá hôm nay và ngày mai đối số đầu vào. kèo bóng đá hôm nay và ngày mai giá trị mặc định được chèn bất cứ khi nào chức năng được gọi với không đủ nhiều thực tế lập luận. Vì kèo bóng đá hôm nay và ngày mai đối số chỉ có thể được bỏ qua từ cuối danh sách đối số thực tế, tất cả kèo bóng đá hôm nay và ngày mai tham số sau một tham số với Một giá trị mặc định phải có giá trị mặc định là tốt. (Mặc dù Việc sử dụng ký hiệu đối số được đặt tên có thể cho phép hạn chế này Để được thư giãn, nó vẫn được thực thi để đối số vị trí ký hiệu hoạt động hợp lý.)

Ví dụ:

Tạo kèo bóng đá hôm nay và ngày mai foo (A int, b int mặc định 2, c int mặc định 3)
Trả về int
Ngôn ngữ SQL
Như $$
    Chọn $ 1 + $ 2 + $ 3;
$$;

Chọn foo (10, 20, 30);
 foo 
-----
  60
(1 hàng)

Chọn foo (10, 20);
 foo 
-----
  33
(1 hàng)

Chọn foo (10);
 foo 
-----
  15
(1 hàng)

Chọn foo ();  - thất bại vì không có mặc định cho đối số đầu tiên
Lỗi: function foo () không tồn tại

The=Dấu hiệu cũng có thể được sử dụng trong nơi của từ khóaMặc định.

35.4.7.kèo bóng đá hôm nay và ngày maiChức năng dưới dạng Nguồn bảng

Tất cả các kèo bóng đá hôm nay và ngày mai SQL có thể được sử dụng trongtừmệnh đề của một truy vấn, nhưng nó đặc biệt Hữu ích cho các chức năng trả về các loại tổng hợp. Nếu chức năng được xác định để trả về một loại cơ sở, kèo bóng đá hôm nay và ngày mai bảng tạo ra một bàn một cột. Nếu kèo bóng đá hôm nay và ngày mai được xác định để trả về một loại tổng hợp, kèo bóng đá hôm nay và ngày mai bảng tạo ra một cột cho mỗi thuộc tính của loại tổng hợp.

Đây là một ví dụ:

Tạo bảng foo (fooid int, foosubid int, fooname văn bản);
Chèn vào các giá trị foo (1, 1, 'joe');
Chèn vào các giá trị foo (1, 2, 'ed');
Chèn vào các giá trị foo (2, 1, 'Mary');

Tạo chức năng getfoo (int) trả về foo dưới dạng $$
    Chọn * từ foo trong đó fooid = $ 1;
$$ Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Chọn *, trên (fooname) từ getfoo (1) là t1;

 Fooid | Foosubid | Fooname | phía trên
-------+----------+---------+-------
     1 |        1 | Joe | Joe
(1 hàng)

Như ví dụ cho thấy, chúng ta có thể làm việc với kèo bóng đá hôm nay và ngày mai cột của kết quả của chức năng giống như khi chúng là cột của một Bảng thông thường.

Lưu ý rằng chúng tôi chỉ có một hàng ra khỏi chức năng. Đây là bởi vì chúng tôi đã không sử dụngsetof. Đó là được mô tả trong phần tiếp theo.

35.4.8.kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai chức năng trả về bộ

Khi kèo bóng đá hôm nay và ngày mai SQL được khai báo là trả vềsetofSOMEYPE,, kèo bóng đá hôm nay và ngày mai cuối cùng của chức năng được thực hiện để hoàn thành và mỗi Row It Outputs được trả về dưới dạng phần tử của tập kết quả.

Tính năng này thường được sử dụng khi gọi chức năng trong Thetừmệnh đề. Trong trường hợp này mỗi hàng được trả về bởi kèo bóng đá hôm nay và ngày mai trở thành một hàng của bảng được nhìn thấy bởi truy vấn. Ví dụ: giả sử bảng đófoocó cùng nội dung như trên và chúng tôi nói:

Tạo chức năng getfoo (int) trả về setof foo dưới dạng $$
    Chọn * từ foo trong đó fooid = $ 1;
$$ Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Chọn * từ getfoo (1) là t1;

Sau đó chúng ta sẽ nhận được:

Fooid | Foosubid | Fooname
-------+----------+---------
     1 |        1 | Joe
     1 |        2 | Ed
(2 hàng)

cũng có thể trả về nhiều hàng với kèo bóng đá hôm nay và ngày mai cột được xác định bởi kèo bóng đá hôm nay và ngày mai tham số đầu ra, như thế này:

Tạo tab bảng (y int, z int);
Chèn vào các giá trị tab (1, 2), (3, 4), (5, 6), (7, 8);

Tạo chức năng sum_n_product_with_tab (x int, out sum int, out sản phẩm int)
Trả về bản ghi Setof
Như $$
    Chọn $ 1 + tab.Y, $ 1 * Tab.y từ tab;
$$ Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Chọn * từ sum_n_product_with_tab (10);
 tổng | sản phẩm
-----+---------
  11 |      10
  13 |      30
  15 |      50
  17 |      70
(4 hàng)

Điểm quan trọng ở đây là bạn phải viếtreturn SetOf Recordđể chỉ ra rằng kèo bóng đá hôm nay và ngày mai trả về nhiều hàng thay vì chỉ một. Nếu có Chỉ có một tham số đầu ra, hãy viết loại tham số đó thay thế củaRecord.

Hiện tại, các chức năng hoàn trả cũng có thể được gọi vào Danh sách chọn của một kèo bóng đá hôm nay và ngày mai. Cho mỗi hàng mà kèo bóng đá hôm nay và ngày mai tự tạo ra, bộ trả về chức năng được gọi và Một hàng đầu ra được tạo cho từng phần tử của chức năng Kết quả đặt. Tuy nhiên, lưu ý rằng khả năng này không được chấp nhận và có thể được loại bỏ trong các bản phát hành trong tương lai. Sau đây là một chức năng ví dụ Trả về một tập hợp từ danh sách chọn:

Tạo chức năng listchildren (văn bản) trả về văn bản setof dưới dạng $$
    Chọn tên từ các nút trong đó cha mẹ = $ 1
$$ Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Chọn * từ các nút;
   Tên | cha mẹ
-----------+--------
 Top |
 Trẻ em 1 | Đứng đầu
 Trẻ em2 | Đứng đầu
 Trẻ em 3 | Đứng đầu
 Subchild1 | Trẻ em1
 Subchild2 | Trẻ em1
(6 hàng)

Chọn listchildren ('top');
 Listchildren
--------------
 Trẻ em1
 Con2
 Trẻ em3
(3 hàng)

Chọn Tên, ListChildren (Tên) từ các nút;
  Tên | Listchildren
--------+--------------
 Top | Trẻ em1
 Top | Con2
 Top | Trẻ em3
 Trẻ em 1 | Subchild1
 Trẻ em 1 | Subchild2
(5 hàng)

Trong lần cuốiChọn, Lưu ý rằng không Hàng đầu ra xuất hiện choChild2, Child3, v.v. Điều này xảy ra vìListchildrenTrả về một bộ trống Đối với kèo bóng đá hôm nay và ngày mai đối số đó, vì vậy không có hàng kết quả nào được tạo.

Lưu ý:Nếu lệnh cuối cùng của kèo bóng đá hôm nay và ngày mai làChèn, Cập nhậthoặcXóavớiTrở về, lệnh đó sẽ luôn được thực hiện để hoàn thành, ngay cả khi chức năng không được khai báo vớisetofhoặc gọi kèo bóng đá hôm nay và ngày mai không lấy tất cả các hàng kết quả. Bất kỳ hàng bổ sung Được sản xuất bởiTrở vềmệnh đề âm thầm bị rơi, nhưng các sửa đổi bảng được chỉ huy vẫn xảy ra (và tất cả đã hoàn thành trước khi trở về từ kèo bóng đá hôm nay và ngày mai).

35.4.9.kèo bóng đá hôm nay và ngày maichức năng trả vềBảng

Có một cách khác để khai báo một chức năng là trả lại a đặt, sử dụng cú phápTrả về BÀN(cột). Đây là tương đương với việc sử dụng một hoặc nhiềuouttham số cộng với đánh dấu kèo bóng đá hôm nay và ngày mai là trả vềSetof Record(hoặcsetofLoại tham số đầu ra duy nhất, nếu phù hợp). Cái này ký hiệu được chỉ định trong các phiên bản gần đây của tiêu chuẩn kèo bóng đá hôm nay và ngày mai, và do đó có thể di động hơn sử dụngsetof.

Ví dụ: ví dụ tổng hợp và sản phẩm trước đó có thể Cũng được thực hiện theo cách này:

Tạo chức năng sum_n_product_with_tab (x int)
Trả về bảng (tổng int, sản phẩm int) là $$
    Chọn $ 1 + tab.Y, $ 1 * Tab.y từ tab;
$$ Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Không được phép sử dụng rõ ràngouthoặcinouttham số vớiTrở về bảngKý hiệu - bạn Phải đặt tất cả kèo bóng đá hôm nay và ngày mai cột đầu ra trongBảngDanh sách.

35.4.10. Đa hìnhkèo bóng đá hôm nay và ngày maiChức năng

kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai chức năng có thể tuyên bố chấp nhận và trả lại kèo bóng đá hôm nay và ngày mai loại đa hìnhAnyEuity, AnyArray, AnynonarrayAnyenum. Nhìn thấyPhần 35.2.5Để giải thích chi tiết hơn về đa hình chức năng. Đây là một kèo bóng đá hôm nay và ngày mai đa hìnhmake_arrayxây dựng một mảng từ hai kèo bóng đá hôm nay và ngày mai yếu tố kiểu dữ liệu tùy ý:

Tạo chức năng Make_array (AnyEuity, AnyEuity) trả về bất kỳ
    Chọn mảng [$ 1, $ 2];
$$ Ngôn ngữ kèo bóng đá hôm nay và ngày mai;

Chọn make_array (1, 2) làm intarray, make_array ('a' :: text, 'b') dưới dạng textarray;
 Intarray | TextArray
----------+-----------
 1,2 | a, b

Lưu ý việc sử dụng typecast'A' :: TextĐể chỉ định rằng đối số là của kiểuText. Điều này là bắt buộc nếu Đối số chỉ là một chuỗi theo nghĩa đen, vì nếu không thì nó sẽ là được coi là loạikhông xác địnhvà mảngkhông xác địnhkhông phải là loại hợp lệ. Mà không có Typecast, bạn sẽ gặp lỗi như thế này:

Lỗi: Không thể xác định loại đa hình vì đầu vào có loại "không xác định"

Nó được phép có kèo bóng đá hôm nay và ngày mai đối số đa hình với một cố định Loại trở lại, nhưng Converse thì không. Ví dụ:

42157_42559

đa hình có thể được sử dụng với kèo bóng đá hôm nay và ngày mai chức năng có đầu ra lập luận. Ví dụ:

42685_42875

Đa hình cũng có thể được sử dụng với các kèo bóng đá hôm nay và ngày mai variadic. Vì ví dụ:

42988_43467