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 kèo bóng đá hôm nay và ngày mai 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ế.

kèo bóng đá hôm nay và ngày mai40.3. Khai báo

Tất cả kèo bóng đá hôm nay và ngày mai biến được sử dụng trong một khối phải được khai báo trong phần khai báo của khối. (kèo bóng đá hôm nay và ngày mai ngoại lệ duy nhất là biến vòng lặp củacho10777_10912choVòng lặp lặp qua kết quả của con trỏ được tự động khai báo là kèo bóng đá hôm nay và ngày mai bản ghi.)

PL/PGSQLkèo bóng đá hôm nay và ngày mai có thể có bất kỳ loại dữ liệu SQL nào, chẳng hạn nhưSố nguyên, Varcharchar.

Dưới đây là một số ví dụ về khai báo kèo bóng đá hôm nay và ngày mai:

Số nguyên user_id;
số lượng số (5);
url varchar;
Tên tablename myrow%RowType;
myfield tablename.columnname%Loại;
Bản ghi AROW;

Cú pháp chung của khai báo kèo bóng đá hôm nay và ngày mai là:

tên[hằng số]loại[đối chiếucollation_name ] [không null] [Mặc định | : = | =Biểu thức ];

Themặc địnhmệnh đề, nếu được đưa ra, chỉ định giá trị ban đầu được gán cho kèo bóng đá hôm nay và ngày mai khi khối được nhập. Nếumặc địnhmệnh đề không được đưa ra thì kèo bóng đá hôm nay và ngày mai được khởi tạo thànhSQLgiá trị null. Thehằng sốTùy chọn ngăn kèo bóng đá hôm nay và ngày mai được gán cho sau khi khởi tạo, do đó giá trị của nó sẽ không đổi trong suốt thời lượng của khối. Theđối chiếuTùy chọn Chỉ định đối chiếu để sử dụng cho kèo bóng đá hôm nay và ngày mai (xemPhần 40.3.6). Nếu nhưkhông nullđược chỉ định, gán giá trị null dẫn đến lỗi thời gian chạy. Tất cả kèo bóng đá hôm nay và ngày mai biến được khai báo làkhông nullphải có giá trị mặc định không phải được chỉ định. Bình đẳng (=) có thể được sử dụng thay vì tuân thủ PL/SQL: =.

Giá trị mặc định của một kèo bóng đá hôm nay và ngày mai được đánh giá và gán cho kèo bóng đá hôm nay và ngày mai mỗi khi khối được nhập (không chỉ một lần mỗi lần gọi chức năng). Vì vậy, ví dụ, gánbây giờ ()đến một kèo bóng đá hôm nay và ngày mai của loạiDấu thời giangây ra kèo bóng đá hôm nay và ngày mai có thời gian gọi hàm hiện tại, không phải thời gian khi hàm được biên dịch trước.

ví dụ:

Số nguyên số mặc định 32;
url varchar: = 'http://mysite.com';
user_id integer hằng số: = 10;

40.3.1. Khai báo tham số chức năng

tham số được truyền cho kèo bóng đá hôm nay và ngày mai chức năng được đặt tên với kèo bóng đá hôm nay và ngày mai định danh$ 1, $ 2, v.v. Tùy chọn, kèo bóng đá hôm nay và ngày mai bí danh có thể được khai báo cho$nTên tham số để tăng khả năng đọc. Bí danh hoặc định danh số sau đó có thể được sử dụng để tham khảo giá trị tham số.

Có hai cách để tạo ra kèo bóng đá hôm nay và ngày mai bí danh. Cách ưa thích là đặt tên cho tham số trongTạo chức năngLệnh, ví dụ:

Tạo chức năng Sales_Tax (Subtotal Real) Trả về Real AS $$
BẮT ĐẦU
    Trả lại phụ * 0,06;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Cách khác là khai báo rõ ràng kèo bóng đá hôm nay và ngày mai bí danh, sử dụng cú pháp khai báo

tênbí danh cho $n;

Ví dụ tương tự trong kiểu này trông giống như:

Tạo chức năng sales_tax (real) Trả về thực là $$
TUYÊN BỐ
    Bí danh phụ với $ 1;
BẮT ĐẦU
    Trả lại phụ * 0,06;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Lưu ý:Hai ví dụ này không hoàn toàn tương đương. Trong trường hợp đầu tiên,Subtotalcó thể được tham chiếu làsales_tax.subtotal, nhưng trong trường hợp thứ hai thì không thể. (Chúng tôi đã gắn kèo bóng đá hôm nay và ngày mai nhãn vào khối bên trong,Subtotalcó thể đủ điều kiện với nhãn đó, thay vào đó.)

kèo bóng đá hôm nay và ngày mai số ví dụ khác:

Tạo chức năng (Varchar, Integer) Trả về số nguyên dưới dạng $$
TUYÊN BỐ
    Bí danh V_String với giá $ 1;
    Chỉ số bí danh với giá $ 2;
BẮT ĐẦU
    - kèo bóng đá hôm nay và ngày mai số tính toán sử dụng V_String và Index ở đây
KẾT THÚC;
$$ Ngôn ngữ plpgsql;

Tạo chức năng Concat_selected_fields (in_t kèo bóng đá hôm nay và ngày mai số tên) Trả về văn bản dưới dạng $$
BẮT ĐẦU
    Trả lại in_t.f1 || in_t.f3 || in_t.f5 || in_t.f7;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Khi APL/PGSQLHàm được khai báo với kèo bóng đá hôm nay và ngày mai tham số đầu ra, kèo bóng đá hôm nay và ngày mai tham số đầu ra được đưa ra$nTên và bí danh tùy chọn theo cách tương tự như kèo bóng đá hôm nay và ngày mai tham số đầu vào thông thường. Một tham số đầu ra thực sự là một biến bắt đầu null; Nó nên được gán cho trong quá trình thực hiện chức năng. Giá trị cuối cùng của tham số là những gì được trả về. Chẳng hạn, ví dụ về thuế bán hàng cũng có thể được thực hiện theo cách này:

Tạo chức năng Sales_Tax (Subtotal Real, Out Tax Real) là $$
BẮT ĐẦU
    Thuế: = Subtotal * 0,06;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Lưu ý rằng chúng tôi đã bỏ quaTrả về Real- Chúng tôi có thể đã bao gồm nó, nhưng nó sẽ là dự phòng.

Tham số đầu ra hữu ích nhất khi trả về nhiều giá trị. kèo bóng đá hôm nay và ngày mai ví dụ tầm thường là:

16414_16561

Như đã thảo luận trongPhần 35.4.4, Điều này tạo ra kèo bóng đá hôm nay và ngày mai loại bản ghi ẩn danh cho kết quả của chức năng. Nếu areturnmệnh đề được đưa ra, nó phải nóiTrả về bản ghi.

kèo bóng đá hôm nay và ngày mai cách khác để khai báo APL/PGSQLchức năng là vớiTrở về bảng, ví dụ:

Tạo chức năng mở rộng_sales (p_itemno int)
Bảng trả về (số lượng int, tổng số) là $$
BẮT ĐẦU
    Truy vấn trả lại Chọn S.Quantity, S.Quantity * s.price từ Sales AS S
                 Trong đó s.itemno = p_itemno;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Điều này hoàn toàn tương đương với việc khai báo kèo bóng đá hôm nay và ngày mai hoặc nhiềuouttham số và chỉ địnhreturn setofSOMEYPE.

Khi loại trả về của APL/PGSQLHàm được khai báo là loại đa hình (AnyEuity, AnyArray, Anynonarray, AnyenumhoặcAnyrange), kèo bóng đá hôm nay và ngày mai tham số đặc biệt$ 0được tạo. Kiểu dữ liệu của nó là loại trả về thực tế của hàm, như được suy ra từ kèo bóng đá hôm nay và ngày mai loại đầu vào thực tế (xemPhần 35.2.5). Điều này cho phép chức năng truy cập loại trả về thực tế của nó như trongPhần 40.3.3. $ 0được khởi tạo thành NULL và có thể được sửa đổi bởi hàm, do đó nó có thể được sử dụng để giữ giá trị trả về nếu muốn, mặc dù điều đó không cần thiết.$ 0cũng có thể được đưa ra kèo bóng đá hôm nay và ngày mai bí danh. Ví dụ: chức năng này hoạt động trên bất kỳ loại dữ liệu nào có+Nhà điều hành:

18493_18709

Có thể có hiệu ứng tương tự bằng cách khai báo một hoặc nhiều tham số đầu ra là kèo bóng đá hôm nay và ngày mai loại đa hình. Trong trường hợp này là đặc biệt$ 0tham số không được sử dụng; kèo bóng đá hôm nay và ngày mai tham số đầu ra tự phục vụ cùng một mục đích. Ví dụ:

Tạo chức năng add_three_values ​​(v1 anyelement, v2 anyEuity
                                 Ra sum anyelement)
Như $$
BẮT ĐẦU
    tổng: = v1 + v2 + v3;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

40.3.2.bí danh

newNamebí danh choOldName;

Thebí danhCú pháp tổng quát hơn so với đề xuất trong phần trước: Bạn có thể khai báo bí danh cho bất kỳ biến nào, không chỉ kèo bóng đá hôm nay và ngày mai tham số chức năng. Việc sử dụng thực tế chính cho điều này là gán một tên khác cho kèo bóng đá hôm nay và ngày mai biến có tên được xác định trước, chẳng hạn nhưmớihoặcTrong kèo bóng đá hôm nay và ngày mai quy trình kích hoạt.

ví dụ:

Tuyên bố
  bí danh trước cho cũ;
  Cập nhật bí danh cho Mới;

kể từbí danhTạo hai cách khác nhau để đặt tên cho cùng kèo bóng đá hôm nay và ngày mai đối tượng, việc sử dụng không giới hạn có thể gây nhầm lẫn. Tốt nhất là chỉ sử dụng nó cho mục đích ghi đè tên được xác định trước.

40.3.3. Sao chép kèo bóng đá hôm nay và ngày mai loại

kèo bóng đá hôm nay và ngày mai%loại

%loạiCung cấp loại dữ liệu của một biến hoặc cột bảng. Bạn có thể sử dụng điều này để khai báo kèo bóng đá hôm nay và ngày mai biến sẽ giữ kèo bóng đá hôm nay và ngày mai giá trị cơ sở dữ liệu. Ví dụ: giả sử bạn có một cột có tênuser_idTrong của bạnNgười dùngBảng. Để khai báo một kèo bóng đá hôm nay và ngày mai có cùng loại dữ liệu vớiusers.user_idbạn viết:

user_id users.user_id%type;

bằng cách sử dụng%loạiBạn không cần biết loại dữ liệu của cấu trúc bạn đang tham khảo và quan trọng nhất, nếu loại dữ liệu của mục được tham chiếu thay đổi trong tương lai (ví dụ: bạn thay đổi loạiuser_idtừSố nguyênđếnReal), bạn có thể không cần thay đổi định nghĩa chức năng của mình.

%loạiđặc biệt có giá trị trong kèo bóng đá hôm nay và ngày mai hàm đa hình, vì kèo bóng đá hôm nay và ngày mai loại dữ liệu cần thiết cho kèo bóng đá hôm nay và ngày mai biến nội bộ có thể thay đổi từ cuộc gọi này sang cuộc gọi tiếp theo. kèo bóng đá hôm nay và ngày mai biến thích hợp có thể được tạo bằng cách áp dụng%loạiĐối với kèo bóng đá hôm nay và ngày mai đối số hoặc trình giữ chỗ kết quả của hàm.

40.3.4. Loại hàng

tên Table_Name%RowType;tên composite_type_name;

Một kèo bóng đá hôm nay và ngày mai của loại tổng hợp được gọi làhàngkèo bóng đá hôm nay và ngày mai (hoặcloại hàngkèo bóng đá hôm nay và ngày mai). Một kèo bóng đá hôm nay và ngày mai như vậy có thể giữ toàn bộ hàng củaChọnhoặcchoKết quả truy vấn, miễn là cột của câu hỏi đó phù hợp với loại được khai báo của biến. kèo bóng đá hôm nay và ngày mai trường riêng lẻ của giá trị hàng được truy cập bằng cách sử dụng ký hiệu dấu chấm thông thường, ví dụRowvar.field.

Một biến hàng có thể được khai báo có cùng loại với kèo bóng đá hôm nay và ngày mai hàng của bảng hoặc chế độ xem hiện có, bằng cách sử dụngTable_Name%RowTypeKý hiệu; Hoặc nó có thể được khai báo bằng cách đặt tên của kèo bóng đá hôm nay và ngày mai loại tổng hợp. (Vì mỗi bảng có kèo bóng đá hôm nay và ngày mai loại tổng hợp liên quan của cùng kèo bóng đá hôm nay và ngày mai tên, nó thực sự không quan trọng trongPOSTGRESQLCho dù bạn viết%RowTypehay không. Nhưng biểu mẫu với%RowTypecó khả năng di động hơn.)

tham số cho một hàm có thể là kèo bóng đá hôm nay và ngày mai loại tổng hợp (hoàn thành kèo bóng đá hôm nay và ngày mai hàng bảng). Trong trường hợp đó, định danh tương ứng$nsẽ là một biến hàng và kèo bóng đá hôm nay và ngày mai trường có thể được chọn từ nó, ví dụ$ 1.USER_ID.

Chỉ kèo bóng đá hôm nay và ngày mai cột do người dùng xác định của hàng bảng mới có thể truy cập được trong một biến loại hàng, không phải kèo bóng đá hôm nay và ngày mai cột hệ thống OID hoặc kèo bóng đá hôm nay và ngày mai cột hệ thống khác (vì hàng có thể đến từ chế độ xem). kèo bóng đá hôm nay và ngày mai trường của loại hàng kế thừa kích thước trường của bảng hoặc độ chính xác cho kèo bóng đá hôm nay và ngày mai loại dữ liệu nhưchar (n).

Đây là một ví dụ về việc sử dụng kèo bóng đá hôm nay và ngày mai loại tổng hợp.Bảng1Bảng2kèo bóng đá hôm nay và ngày mai bảng hiện có có ít nhất kèo bóng đá hôm nay và ngày mai trường được đề cập:

Tạo chức năng Merge_Fields (T_Row Bảng1) Trả về văn bản dưới dạng $$
TUYÊN BỐ
    T2_ROW Bảng2%RowType;
BẮT ĐẦU
    Chọn * vào T2_row từ Bảng2 trong đó ...;
    Trả về t_row.f1 || T2_ROW.F3 || t_row.f5 || t2_row.f7;
KẾT THÚC;
$$ Ngôn ngữ plpgsql;

Chọn Merge_fields (t.*) Từ Bảng1 t trong đó ...;

40.3.5. kèo bóng đá hôm nay và ngày mai loại bản ghi

tênRecord;

Biến bản ghi tương tự như kèo bóng đá hôm nay và ngày mai biến loại hàng, nhưng chúng không có cấu trúc được xác định trước. Họ đảm nhận cấu trúc hàng thực tế của hàng mà họ được gán trong mộtChọnhoặcchoLệnh. Cấu trúc của kèo bóng đá hôm nay và ngày mai bản ghi có thể thay đổi mỗi khi nó được gán cho. Hậu quả của điều này là cho đến khi một kèo bóng đá hôm nay và ngày mai bản ghi được gán đầu tiên, nó không có cấu trúc phụ và bất kỳ nỗ lực nào để truy cập một trường trong đó sẽ rút ra lỗi thời gian chạy.

Lưu ý rằngRecordkhông phải là kiểu dữ liệu thực sự, chỉ có kèo bóng đá hôm nay và ngày mai trình giữ chỗ. Người ta cũng nên nhận ra rằng khi APL/PGSQLHàm được khai báo để trả về loạiRecord, Đây không hoàn toàn giống với một kèo bóng đá hôm nay và ngày mai số bản ghi, mặc dù một hàm như vậy có thể sử dụng kèo bóng đá hôm nay và ngày mai bản ghi để giữ kết quả của nó. Trong cả hai trường hợp, cấu trúc hàng thực tế không rõ khi nào chức năng được viết, nhưng đối với một chức năng trả vềRecordCấu trúc thực tế được xác định khi truy vấn gọi được phân tích cú pháp, trong khi đó một kèo bóng đá hôm nay và ngày mai bản ghi có thể thay đổi cấu trúc hàng của nó trên đường.

40.3.6. Đối chiếuPL/PGSQLkèo bóng đá hôm nay và ngày mai

Khi APL/PGSQL25641_25833Phần 22.2. Nếu một đối chiếu được xác định thành công (nghĩa là, không có xung đột nào của kèo bóng đá hôm nay và ngày mai đối chiếu ngầm giữa kèo bóng đá hôm nay và ngày mai đối số) thì tất cả kèo bóng đá hôm nay và ngày mai tham số có thể lấy được được coi là có sự hợp tác đó ngầm. Điều này sẽ ảnh hưởng đến hành vi của kèo bóng đá hôm nay và ngày mai hoạt động nhạy cảm đối chiếu trong chức năng. Ví dụ, xem xét

26213_26460

lần đầu tiên sử dụngLess_thansẽ sử dụng đối chiếu chungtext_field_1text_field_2Để so sánh, trong khi việc sử dụng thứ hai sẽ sử dụngCđối chiếu.

Hơn nữa, đối chiếu được xác định cũng được coi là đối chiếu của bất kỳ biến cục bộ nào thuộc kèo bóng đá hôm nay và ngày mai loại có thể kết hợp. Do đó, chức năng này sẽ không hoạt động khác nếu nó được viết là

26969_27153

Nếu không có tham số của kèo bóng đá hôm nay và ngày mai loại dữ liệu có kết hợp hoặc không có đối chiếu chung nào có thể được xác định cho chúng, thì kèo bóng đá hôm nay và ngày mai tham số và biến cục bộ sử dụng đối chiếu mặc định của kiểu dữ liệu của chúng (thường là đối chiếu mặc định của cơ sở dữ liệu, nhưng có thể khác nhau đối với kèo bóng đá hôm nay và ngày mai biến của kèo bóng đá hôm nay và ngày mai loại miền).

27460_27572đối chiếutùy chọn trong khai báo của nó, ví dụ

Khai báo
    local_a văn bản đối chiếu "en_us";

Tùy chọn này ghi đè lên đối chiếu nếu không sẽ được cung cấp cho biến theo kèo bóng đá hôm nay và ngày mai quy tắc trên.

Ngoài ra, tất nhiên là rõ ràngđối chiếukèo bóng đá hôm nay và ngày mai điều khoản có thể được viết bên trong một hàm nếu muốn buộc một đối chiếu cụ thể được sử dụng trong một hoạt động cụ thể. Ví dụ,

28075_28207

Điều này ghi đè kèo bóng đá hôm nay và ngày mai đối chiếu được liên kết với kèo bóng đá hôm nay và ngày mai cột, tham số hoặc kèo bóng đá hôm nay và ngày mai biến cục bộ được sử dụng trong biểu thức, giống như sẽ xảy ra trong lệnh SQL đơn giản.