Phiên bản được hỗ trợ:3535_3544(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 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

37.7. Cấu trúc điều kèo chấp bóng đá hôm nay

cấu trúc điều kèo chấp bóng đá hôm nay có lẽ là hữu ích nhất (và quan trọng) một phần củaPL/PGSQL. VớiPL/PGSQL11243_11289PostgreSQLDữ liệu trong rất linh hoạt và cách mạnh mẽ.

37.7.1. Trở về từ a Chức năng

Có hai lệnh có sẵn cho phép bạn quay lại Dữ liệu từ một hàm:returnReturn Next.

37.7.1.1.return

returnBiểu thức;

returnvới một biểu thức chấm dứt hàm và trả về giá trị củaBiểu thứccho người gọi. Hình thức này là được sử dụng choPL/PGSQLCác chức năng không trả về một bộ.

kèo chấp bóng đá hôm nay trả lại loại vô hướng, bất kỳ biểu thức nào cũng có thể được sử dụng. Kết quả của biểu thức sẽ được tự động chuyển vào Loại trả về của chức năng như được mô tả cho các bài tập. ĐẾN Trả về giá trị tổng hợp (hàng), bạn phải ghi một bản ghi hoặc Biến hàng dưới dạngBiểu thức.

Giá trị trả về của hàm không thể được xác định. Nếu điều kèo chấp bóng đá hôm nay đạt đến cuối khối cấp cao nhất của chức năng mà không nhấnreturncâu lệnh, lỗi thời gian chạy sẽ xảy ra.

Nếu bạn đã tuyên bố chức năng trả lạivoid, AreturnTuyên bố vẫn phải được chỉ định; Nhưng trong trường hợp này, biểu thức tiếp theoreturnlà tùy chọn và sẽ bị bỏ qua nếu có.

37.7.1.2.Return Next

Return NextBiểu thức;

kèo chấp bóng đá hôm nay APL/PGSQL13445_13485setofSOMEYPE, Quy trình tuân theo là hơi khác nhau. Trong trường hợp đó, các mục riêng lẻ để Trả về được chỉ định trongReturn NextCác lệnh, và sau đó là cuối cùngreturnLệnh không có đối số nào được sử dụng để chỉ ra rằng chức năng đã hoàn thành thực thi.trở lại KẾ TIẾPcó thể được sử dụng với cả dữ liệu vô hướng và tổng hợp loại; Trong trường hợp sau, toàn bộ"Bảng"kết quả sẽ được trả về.

Các chức năng sử dụngReturn NextNên được gọi theo kiểu sau:

Chọn * từ một số_func ();

nghĩa là, hàm được sử dụng làm nguồn bảng trong Atừmệnh đề.

Return NextKhông thực sự trở lại từ chức năng; nó chỉ đơn giản là tiết kiệm giá trị của Biểu thức (hoặc biến bản ghi hoặc biến hàng, nếu phù hợp với Kiểu dữ liệu được trả về). Thực thi sau đó tiếp tục với Câu lệnh tiếp theo trongPL/PGSQLHàm. Như liên tiếpReturn NextCác lệnh được thực thi, Bộ kết quả được xây dựng. Một cuối cùngreturn, không có đối số, gây ra kiểm soát để thoát chức năng.

Lưu ý:Việc triển khai hiện tại củatrở lại tiếp theochoPL/PGSQLlưu trữ toàn bộ kết quả đặt trước kèo chấp bóng đá hôm nay trở về từ chức năng, như đã thảo luận bên trên. Điều đó có nghĩa là nếu mộtPL/PGSQLchức năng tạo ra rất tập hợp kết quả lớn, hiệu suất có thể kém: dữ liệu sẽ là được viết vào đĩa để tránh cạn kiệt bộ nhớ, nhưng Bản thân chức năng sẽ không trở lại cho đến kèo chấp bóng đá hôm nay toàn bộ kết quả Bộ đã được tạo ra. Một phiên bản tương lai củaPL/PGSQLCó thể cho phép người dùng xác định Các chức năng trả lại đặt không có giới hạn này. Hiện tại, điểm mà dữ liệu bắt đầu được viết Đĩa được điều kèo chấp bóng đá hôm nay bởisort_memBiến cấu hình. Quản trị viên có đủ bộ nhớ để lưu trữ lớn hơn Các bộ kết quả trong bộ nhớ nên xem xét tăng điều này tham số.

37.7.2. Điều kiện

nếuCâu lệnh cho phép bạn thực thi các lệnh dựa trên các điều kiện nhất định.PL/PGSQLCó bốn hình thứcnếu:

  • Nếu ... thì

  • Nếu ... thì ... khác

  • Nếu ... thì ... khác nếu

  • 16842_16891

37.7.2.1.if-then

nếuBoolean-biểu hiệnsau đócâukết thúc if;

if-thenCâu nói là Hình thức đơn giản nhất củanếu. Các tuyên bố giữasau đó17415_17423sẽ được thực thi nếu điều kiện là ĐÚNG VẬY. Nếu không, chúng bị bỏ qua.

Ví dụ:

Nếu v_user_id < 0 sau đó
    Cập nhật người dùng đặt email = v_email trong đó user_id = v_user_id;
Kết thúc nếu;

37.7.2.2.if-then-else

nếuBoolean-biểu hiệnsau đóCâukháccâu lệnhkết thúc if;

if-then-elseCâu lệnh thêm vàoif-thenbằng cách cho phép bạn chỉ định một tập hợp các câu lệnh thay thế nên được thực thi nếu Điều kiện đánh giá là sai.

Ví dụ:

18329_18470
Nếu V_Count 0 sau đó 
    Chèn vào các giá trị user_count (đếm) (v_count);
    Trả về '' t '';
KHÁC
    Trả về '' f '';
Kết thúc nếu;

37.7.2.3.if-then-else if

nếuCâu nói có thể được lồng, vì Trong ví dụ sau:

Nếu demo_row.sex = '' M '' sau đó
    đẹp_sex: = '' người đàn ông '';
KHÁC
    Nếu demo_row.sex = '' f '' thì
        đẹp_sex: = '' người phụ nữ '';
    Kết thúc nếu;
Kết thúc nếu;

kèo chấp bóng đá hôm nay bạn sử dụng biểu mẫu này, bạn thực sự đang làm tổnếucâu lệnh bên trongkhácmột phần của bên ngoàinếuTuyên bố. Vì vậy, bạn cần mộtkết thúc nếuCâu lệnh cho mỗi cái lồng nhaunếuvà một cho cha mẹif-else. Điều này là khả thi nhưng phát triển tẻ nhạt kèo chấp bóng đá hôm nay có nhiều lựa chọn thay thế để được kiểm tra. Do đó Mẫu tiếp theo.

37.7.2.4.if-then-elef-else

nếuBoolean-biểu hiệnsau đóCâu[elsif19970_19990sau đóCâu[elsifBoolean-biểu hiệnsau đóCâu...]]
[khácCâu ]
Kết thúc nếu;

IF-THEN-ELEF-ELSEcung cấp a Phương pháp thuận tiện hơn để kiểm tra nhiều lựa chọn thay thế trong một tuyên bố. Chính thức nó tương đương với lồng nhauif-then-else-if-thenlệnh, nhưng chỉ mộtkết thúc nếulà cần thiết.

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

Nếu số = 0 sau đó
    kết quả: = '' không '';
Số elsif 0 sau đó 
    kết quả: = '' tích cực '';
Số elsif <0 sau đó
    kết quả: = '' tiêu cực '';
KHÁC
    - hmm, khả năng duy nhất khác là số đó là null
    kết quả: = '' null '';
Kết thúc nếu;

37.7.3. Đơn giản Vòng kèo chấp bóng đá hôm nay

vớiVòng kèo chấp bóng đá hôm nay, Thoát, trong kèo chấp bóng đá hôm naychoCâu lệnh, bạn có thể sắp xếp cho của bạnPL/PGSQLHàm đến kèo chấp bóng đá hôm nay lại một loạt các lệnh.

37.7.3.1.vòng kèo chấp bóng đá hôm nay

[<<nhãn]
Vòng kèo chấp bóng đá hôm naycâuvòng kèo chấp bóng đá hôm nay kết thúc;

vòng kèo chấp bóng đá hôm nayXác định một điều kiện vô điều kiện Vòng lặp được lặp lại vô thời hạn cho đến kèo chấp bóng đá hôm nay bị chấm dứt bởi mộtThoáthoặcreturnTuyên bố. Nhãn tùy chọn có thể là Được sử dụng bởiThoátCâu trong lồng nhau các kèo chấp bóng đá hôm nay để xác định mức độ tổ nên được bị chấm dứt.

37.7.3.2.Thoát

Thoát [ nhãn ] [kèo chấp bóng đá hôm nayBiểu thức ];

nếu khôngnhãnđược đưa ra, The Vòng kèo chấp bóng đá hôm nay trong cùng được chấm dứt và câu lệnh sauKết thúc kèo chấp bóng đá hôm nayđược thực hiện tiếp theo. Nếu nhưnhãn22741_22982kết thúc.

nếukèo chấp bóng đá hôm nayCó mặt, Loop EXIT chỉ xảy ra nếu điều kiện được chỉ định là đúng, nếu không Kiểm soát chuyển sang câu lệnh sauThoát.

Ví dụ:

Vòng lặp
    - Một số tính toán
    Nếu đếm 0 thì
        RA;  - Vòng lặp thoát
    Kết thúc nếu;
Kết thúc vòng lặp;

Vòng lặp
    - Một số tính toán
    Thoát kèo chấp bóng đá hôm nay đếm 0;  - Kết quả tương tự như ví dụ trước
Kết thúc vòng lặp;

BẮT ĐẦU
    - Một số tính toán
    Nếu cổ phiếu 100000 thì
        RA;  -- không hợp lệ; không thể sử dụng lối ra bên ngoài vòng lặp
    Kết thúc nếu;
KẾT THÚC;

37.7.3.3.trong kèo chấp bóng đá hôm nay

[<<nhãn]
TRONG kèo chấp bóng đá hôm nayBiểu thứcvòng kèo chấp bóng đá hôm naycâu lệnhvòng kèo chấp bóng đá hôm nay kết thúc;

Thetrong kèo chấp bóng đá hôm nayCâu lệnh kèo chấp bóng đá hôm nay lại a trình tự các câu lệnh miễn là biểu thức điều kiện đánh giá đúng. Điều kiện được kiểm tra ngay trước mỗi nhập vào cơ thể vòng kèo chấp bóng đá hôm nay.

Ví dụ:

Trong kèo chấp bóng đá hôm nay số lượng_owed 0 và gift_certificate_balance 0 Loop
    - Một số tính toán ở đây
Kết thúc vòng lặp;

Trong kèo chấp bóng đá hôm nay không boolean_expression vòng lặp
    - Một số tính toán ở đây
Vòng lặp cuối;

37.7.3.4.24637_24642(biến thể số nguyên)

[<<nhãn]
VÌtêntrong [đảo ngược24874_24878Biểu thức..Biểu thứcVòng kèo chấp bóng đá hôm naycâu lệnhvòng kèo chấp bóng đá hôm nay kết thúc;

Hình thức này củachoTạo một vòng kèo chấp bóng đá hôm nay Rằng kèo chấp bóng đá hôm nay đi kèo chấp bóng đá hôm nay lại trên một loạt các giá trị số nguyên. BiếnTênđược tự động xác định dưới dạng loạiSố nguyênvà chỉ tồn tại bên trong vòng lặp. Hai biểu thức cho phần dưới và trên Giới hạn của phạm vi được đánh giá một lần kèo chấp bóng đá hôm nay vào vòng lặp. Bước lặp thường là 1, nhưng là -1 kèo chấp bóng đá hôm nayđảo ngượcđược chỉ định.

Một số ví dụ về số nguyênchovòng kèo chấp bóng đá hôm nay:

cho tôi trong 1..10 vòng kèo chấp bóng đá hôm nay
    - Một số tính toán ở đây
    Nâng cao thông báo '' Tôi là %'', tôi;
Kết thúc vòng kèo chấp bóng đá hôm nay;

Đối với tôi trong đảo ngược 10..1 vòng kèo chấp bóng đá hôm nay
    - Một số tính toán ở đây
Vòng kèo chấp bóng đá hôm nay cuối;

Nếu giới hạn dưới lớn hơn giới hạn trên (hoặc ít hơn, trongđảo ngượctrường hợp), The Cơ thể vòng kèo chấp bóng đá hôm nay hoàn toàn không được thực hiện. Không có lỗi được nêu ra.

37.7.4. Vòng kèo chấp bóng đá hôm nay qua truy vấn Kết quả

Sử dụng một loại khácchoVòng kèo chấp bóng đá hôm nay, bạn có thể kèo chấp bóng đá hôm nay lại thông qua kết quả của một truy vấn và thao túng dữ liệu đó cho phù hợp. Cú pháp là:

[<<nhãn]
VÌRecord_or_rowinTruy vấnvòng kèo chấp bóng đá hôm nayCâuvòng kèo chấp bóng đá hôm nay kết thúc;

Biến bản ghi hoặc hàng được gán liên tiếp cho mỗi hàng kết quả từ truy vấn (AChọnLệnh) và thân kèo chấp bóng đá hôm nay được thực thi cho mỗi hàng. Đây là một ví dụ:

Tạo hàm CS_REFRESH_MVIEWS () Trả về số nguyên là '
TUYÊN BỐ
    Bản ghi MViews;
BẮT ĐẦU
    Thực hiện cs_log ('' làm mới các chế độ xem được vật chất hóa ... '');

    Đối với các mview trong select * từ cs_materialized_views đặt hàng theo vòng kèo chấp bóng đá hôm nay sort_key

        - Bây giờ "mview" có một bản ghi từ cs_m vật liệu hóa_views

        Thực hiện cs_log ('' làm mới chế độ xem được vật chất hóa '' || quote_ident (mviews.mv_name) |
        Thực thi '' Bảng cắt ngắn '' || quote_ident (mviews.mv_name);
        Thực thi '' chèn vào '' | | QUOTE_IDENT (mviews.mv_name) || '' '' || mviews.mv_query;
    Kết thúc vòng kèo chấp bóng đá hôm nay;

    Thực hiện cs_log ('' thực hiện các chế độ xem được làm mới. '');
    Trả lại 1;
KẾT THÚC;
'Ngôn ngữ plpgsql;

Nếu vòng kèo chấp bóng đá hôm nay bị chấm dứt bởiThoátcâu lệnh, giá trị hàng được gán cuối cùng là vẫn có thể truy cập sau vòng kèo chấp bóng đá hôm nay.

Thefor-in-ExecuteCâu lệnh là Một cách khác để kèo chấp bóng đá hôm nay lại các bản ghi:

[<<nhãn]
VÌRecord_or_rowtrong thực thitext_expressionVòng kèo chấp bóng đá hôm naycâuvòng kèo chấp bóng đá hôm nay kết thúc;

Đây giống như biểu mẫu trước đó, ngoại trừ nguồnChọnCâu lệnh được chỉ định là A Biểu thức chuỗi, được đánh giá và trả lời trên mỗi nhập vàochoVòng kèo chấp bóng đá hôm nay. Điều này cho phép lập trình viên chọn tốc độ của một truy vấn được định sẵn hoặc Tính linh hoạt của một truy vấn động, giống như với một đơn giảnthực thicâu lệnh.

Lưu ý:ThePL/PGSQLhiện tại trình phân tích cú pháp phân biệt hai loạichovòng kèo chấp bóng đá hôm nay (kết quả số nguyên hoặc truy vấn) bằng cách kiểm tra xem Biến mục tiêu được đề cập chỉ sauchođã được khai báo dưới dạng bản ghi hoặc hàng biến. Nếu không, nó được cho là một số nguyênchoVòng lặp. Điều này có thể gây ra khá không trực quan thông báo lỗi kèo chấp bóng đá hôm nay vấn đề thực sự là đã viết sai tên biến saucho. Điển hình là kèo chấp bóng đá hôm nayếu nại sẽ là một cái gì đó nhưthiếu ".." ở cuối Biểu thức SQL.