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 kèo bóng đá hôm nay và ngày mai trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

39.6. Cấu trúc điều kèo bóng đá hôm nay và ngày mai

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

39.6.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ừ kèo bóng đá hôm nay và ngày mai hàm:returntrở lại tiếp theo.

39.6.1.1.return

returnBiểu thức;

returnvới kèo bóng đá hôm nay và ngày mai 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/PGSQLchức năng không trả về kèo bóng đá hôm nay và ngày mai tập hợp.

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

Nếu bạn khai báo chức năng với các tham số đầu ra, hãy viết chỉreturnKhông có biểu thức. Các Các giá trị hiện tại của các biến tham số đầu ra sẽ là đã trả về.

Nếu bạn tuyên bố chức năng trả vềvoid, AreturnTuyên bố có thể được sử dụng để thoát khỏi chức năng sớm; Nhưng không viết kèo bóng đá hôm nay và ngày mai Biểu thức saureturn.

Giá trị trả về của hàm không thể được xác định. Nếu điều kèo bóng đá hôm nay và ngày mai đạ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, kèo bóng đá hôm nay và ngày mai lỗi thời gian chạy sẽ xảy ra. Hạn chế này không Không áp dụng cho các chức năng với các tham số và chức năng đầu ra Trở vềvoidTuy nhiên. Trong những trường hợp đó kèo bóng đá hôm nay và ngày maireturnCâu lệnh được tự động được thực hiện nếu khối cấp cao kết thúc.

39.6.1.2.Return NextTruy vấn trả lại

Return NextBiểu thức;
Truy vấn trả vềTruy vấn;
Truy vấn trả về thực thi13948_13964[Sử dụngBiểu thức[, ...]];

kèo bóng đá hôm nay và ngày mai APL/PGSQLHàm được tuyên bố trả lạisetofSOMEYPE, 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 bởi kèo bóng đá hôm nay và ngày mai chuỗiReturn Nexthoặctrở lại Truy vấnCác lệnh, và sau đó là cuối cùngreturnLệnh không có đối số nào được sử dụng để cho biết rằng chức năng đã hoàn thành thực thi.Return Nextcó thể được sử dụng với cả vô hướng và loại dữ liệu tổng hợp; với loại kết quả tổng hợp, toàn bộ"Bảng"kết quả sẽ đã trả về.Truy vấn trả vềBổ sung cho kết quả thực hiện truy vấn cho tập kết quả của hàm.Return NextTruy vấn trả vềcó thể được kết hợp tự do trong A chức năng hoàn trả kèo bóng đá hôm nay và ngày mai lần, trong trường hợp đó kết quả của chúng sẽ được nối.

Return NextTruy vấn trả lạiKhông thực sự trở lại từ chức năng - chúng chỉ đơn giản là nối số 0 hoặc nhiều hàng kèo bóng đá hôm nay và ngày maio bộ kết quả của chức năng. Thực thi sau đó tiếp tục với cái tiếp theo tuyên bố trongPL/PGSQLHàm. Như liên tiếpReturn NexthoặcTruy vấn trả vềCác lệnh là Thực hiện, tập hợp kết quả được xây dựng. kèo bóng đá hôm nay và ngày mai cuối cùngreturn, không có đối số, nguyên nhân Kiểm soát để thoát chức năng (hoặc bạn chỉ có thể cho phép điều kèo bóng đá hôm nay và ngày mai đạt đến đầu của hàm).

Truy vấn trả lạicó biến thểTruy vấn trả về, mà Chỉ định truy vấn sẽ được thực thi động. Tham số Các biểu thức có thể được chèn kèo bóng đá hôm nay và ngày maio chuỗi truy vấn được tính toán thông quasử dụng, theo cách tương tự như trongthực thilệnh.

Nếu bạn khai báo chức năng với các tham số đầu ra, hãy viết chỉReturn NextKhông có biểu thức. Trên mỗi lần thực thi, các giá trị hiện tại của tham số đầu ra (các) biến sẽ được lưu để trả về cuối cùng như kèo bóng đá hôm nay và ngày mai hàng của kết quả. Lưu ý rằng bạn phải khai báo chức năng là trả vềSetof Recordkèo bóng đá hôm nay và ngày mai có nhiều tham số đầu ra hoặcsetofSOMEYPEkèo bóng đá hôm nay và ngày mai chỉ có một tham số đầu ra của loạiSOMEYPE, để tạo kèo bóng đá hôm nay và ngày mai chức năng đặt lại với tham số đầu ra.

Đây là kèo bóng đá hôm nay và ngày mai ví dụ về chức năng sử dụngReturn Next:

Tạo bảng foo (fooid int, foosubid int, fooname văn bản);
Chèn vào các giá trị foo (1, 2, 'ba');
Chèn vào các giá trị foo (4, 5, 'sáu');

Tạo hoặc thay thế hàm getallfoo () trả về setof foo như
$ Body $
TUYÊN BỐ
    r foo%rowtype;
BẮT ĐẦU
    Cho r trong chọn * từ foo
    WHERE FOOID 0
    Vòng lặp
        - Có thể thực hiện kèo bóng đá hôm nay và ngày mai số xử lý ở đây
        Trở lại R tiếp theo; - Trả về hàng hiện tại của chọn
    Kết thúc vòng lặp;
    TRỞ LẠI;
KẾT THÚC
$ Body $
Ngôn ngữ plpgsql;

Chọn * từ getallfoo ();

Lưu ý:Việc triển khai hiện tại củatrở lại tiếp theotrở lại Truy vấnLưu trữ toàn bộ tập kết quả trước kèo bóng đá hôm nay và ngày mai trả về từ chức năng, như đã thảo luận ở trên. Điều đó có nghĩa là nếu MộtPL/PGSQLHàm tạo ra một bộ kết quả rất lớn, hiệu suất có thể là Tiền kém: Dữ liệu sẽ được ghi vào đĩa để tránh bộ nhớ kiệt sức, nhưng chính chức năng sẽ không trở lại cho đến kèo bóng đá hôm nay và ngày mai toàn bộ tập hợp kết quả đã được tạo ra. Một tương lai Phiên bản củaPL/PGSQLcó thể cho phép người dùng xác định các chức năng quay lại đã đặt Không có giới hạn này. Hiện tại, điểm tại Dữ liệu nào bắt đầu được ghi kèo bóng đá hôm nay và ngày maio đĩa được kiểm soát bởi Thework_memBiến cấu hình. Quản trị viên có đủ bộ nhớ để lưu trữ các bộ kết quả lớn hơn trong bộ nhớ nên xem xét tăng tham số này.

39.6.2. Điều kiện

nếucaseCâu lệnh cho phép bạn thực hiện thay thế các lệnh dựa trên các điều kiện nhất định.PL/PGSQLCó ba dạngnếu:

  • nếu ... thì

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

  • Nếu ... thì ... elsif ... sau đó ... KHÁC

và hai hình thứccase:

  • trường hợp ... kèo bóng đá hôm nay và ngày mai ... sau đó ... khác ... Trường hợp kết thúc

  • trường hợp kèo bóng đá hôm nay và ngày mai ... sau đó ... khác ... kết thúc TRƯỜNG HỢP

39.6.2.1.if-then

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

if-thenBáo cáo là Hình thức đơn giản nhất củanếu. Các tuyên bố giữasau đókết thúc nếusẽ đượ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ụ:

20467_20571

39.6.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 kèo bóng đá hôm nay và ngày maioif-thenbằng cách cho phép bạn chỉ định kèo bóng đá hôm nay và ngày mai tập hợp các câu lệnh thay thế nên được thực thi nếu Điều kiện không đúng. (Lưu ý điều này bao gồm trường hợp Điều kiện đánh giá thành NULL.)

ví dụ:

Nếu ParentID là null hoặc ParentID = ''
SAU ĐÓ
    Trả lại fullname;
KHÁC
    Trả về HP_TRUE_FILENAME (ParentID) || '/' || tên đầy đủ;
Kết thúc nếu;
Nếu v_count 0 thì sau đó
    Chèn kèo bóng đá hôm nay và ngày maio các giá trị user_count (đếm) (v_count);
    Trả lại 't';
KHÁC
    Trả lại 'f';
Kết thúc nếu;

39.6.2.3.IF-THEN-ELEF

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

Đôi kèo bóng đá hôm nay và ngày mai có nhiều hơn chỉ hai lựa chọn thay thế.IF-THEN-ELEFCung cấp thuận tiện Phương pháp kiểm tra kèo bóng đá hôm nay và ngày mai số lựa chọn thay thế lần lượt. Thenếu22513_22714Kết thúc NẾU NHƯ. (Bất kỳ sau đónếuĐiều kiện làkhôngĐã kiểm tra.) Nếu không cónếuĐiều kiện là đúng, sau đó làkháckhối (nếu có) được thực thi.

Đây là kèo bóng đá hôm nay và ngày mai ví dụ:

Nếu số = 0 thì sau đó
    kết quả: = 'không';
Số elsif 0 sau đó
    Kết quả: = 'Tích cực';
Số elsif <0 sau đó
    kết quả: = 'âm';
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;

Từ khóaelsifcũng có thể đánh vầnotherif.

kèo bóng đá hôm nay và ngày mai cách thay thế để hoàn thành cùng kèo bóng đá hôm nay và ngày mai nhiệm vụ là tổif-then-elseCâu lệnh, như 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;

Tuy nhiên, phương pháp này yêu cầu viết kèo bóng đá hôm nay và ngày mai phù hợpkết thúc nếucho mỗinếu, vì vậy nó cồng kềnh hơn nhiều so với sử dụngelsifkèo bóng đá hôm nay và ngày mai có nhiều lựa chọn thay thế.

39.6.2.4. Đơn giảncase

casebiểu hiện tìm kiếmkèo bóng đá hôm nay và ngày maiexpression[, Biểu thức[...]] Sau đócâu lệnh[kèo bóng đá hôm nay và ngày maiBiểu thức[, Biểu thức[...]] Sau đóCâu...]
  [kháccâu ]
Trường hợp kết thúc;

Hình thức đơn giản củacasecung cấp Thực thi có điều kiện dựa trên sự bình đẳng của toán hạng. TheBiểu hiện tìm kiếmIS được đánh giá (kèo bóng đá hôm nay và ngày mai lần) và liên tiếp so với mỗi25183_25195Trongkèo bóng đá hôm nay và ngày maimệnh đề. Nếu kèo bóng đá hôm nay và ngày mai trận đấu được tìm thấy, thì tương ứngCâulà được thực thi và sau đó kiểm soát chuyển sang câu lệnh tiếp theo sautrường hợp kết thúc. (Tiếp theokèo bóng đá hôm nay và ngày mai25506_25573khác Câuđược thực thi; Nhưng nếukháckhông có mặt, sau đó làcase_not_foundNgoại lệ là nâng lên.

Đây là kèo bóng đá hôm nay và ngày mai ví dụ đơn giản:

trường hợp x
    kèo bóng đá hôm nay và ngày mai 1, 2 sau đó
        tin nhắn: = 'một hoặc hai';
    KHÁC
        tin nhắn: = 'giá trị khác hơn một hoặc hai';
Trường hợp kết thúc;

39.6.2.5. Đã tìm kiếmcase

trường hợp
    kèo bóng đá hôm nay và ngày maiBoolean-biểu hiệnsau đóCâu[kèo bóng đá hôm nay và ngày maiBoolean-biểu hiệnsau đóCâu...]
  [khácCâu ]
Trường hợp kết thúc;

Hình thức được tìm kiếm củacaseCung cấp thực thi có điều kiện dựa trên sự thật của Boolean biểu cảm. Mỗikèo bóng đá hôm nay và ngày maimệnh đềBoolean-biểu hiệnIS lần lượt được đánh giá, cho đến kèo bóng đá hôm nay và ngày mai phát hiện ra sản lượngTRUE. Sau đó tương ứngCâuđược thực hiện, và sau đó Kiểm soát chuyển sang câu lệnh tiếp theo sautrường hợp kết thúc. (Tiếp theokèo bóng đá hôm nay và ngày maiBiểu thức không được đánh giá.) Nếu không Kết quả đúng được tìm thấy,khác Câu27302_27332kháckhông có mặt, sau đó Acase_not_foundNgoại lệ là nâng lên.

Đây là kèo bóng đá hôm nay và ngày mai ví dụ:

trường hợp
    kèo bóng đá hôm nay và ngày mai x từ 0 đến 10 thì
        MSG: = 'Giá trị nằm trong khoảng từ 0 đến mười';
    kèo bóng đá hôm nay và ngày mai x từ 11 đến 20 thì
        tin nhắn: = 'giá trị nằm trong khoảng từ mười một đến hai mươi';
Trường hợp kết thúc;

Hình thức này củacasehoàn toàn tương đương vớiIF-THEN-ELEF, ngoại trừ Đối với quy tắc đạt được kèo bóng đá hôm nay và ngày mai sự bỏ quakhácĐiều khoản dẫn đến lỗi thay vì Không làm gì cả.

39.6.3. Đơn giản Vòng kèo bóng đá hôm nay và ngày mai

vớivòng kèo bóng đá hôm nay và ngày mai, Thoát, 28284_28294, trong kèo bóng đá hôm nay và ngày mai, cho,, VàforeachCâu lệnh, bạn có thể Sắp xếp cho của bạnPL/PGSQLhàm để lặp lại kèo bóng đá hôm nay và ngày mai loạt các lệnh.

39.6.3.1.vòng kèo bóng đá hôm nay và ngày mai

[<<nhãn ]
Vòng kèo bóng đá hôm nay và ngày maicâuvòng kèo bóng đá hôm nay và ngày mai cuối [ nhãn ];

vòng kèo bóng đá hôm nay và ngày mai28974_29072ThoáthoặcreturnTuyên bố. Tùy chọnNhãncó thể được sử dụng bởiThoátTiếp tụcCác câu lệnh trong các vòng kèo bóng đá hôm nay và ngày mai lồng nhau để chỉ định vòng kèo bóng đá hôm nay và ngày mai nào Các câu lệnh tham khảo.

39.6.3.2.Thoát

Thoát [ nhãn ] [kèo bóng đá hôm nay và ngày maiBoolean-biểu hiện ];

nếu khôngnhãnđược đưa ra, The Vòng kèo bóng đá hôm nay và ngày mai trong cùng được chấm dứt và câu lệnh sauvòng kết thúcđược thực hiện tiếp theo. Nếu nhưnhãnđược đưa ra, nó phải là Nhãn của hiện tại hoặc một số cấp độ bên ngoài của vòng lặp lồng nhau hoặc khối. Sau đó, vòng lặp hoặc khối được đặt tên bị chấm dứt và Kiểm soát tiếp tục với câu lệnh sau kèo bóng đá hôm nay và ngày mai vòng lặp/khối tương ứngkết thúc.

nếukèo bóng đá hôm nay và ngày maiđược chỉ định, vòng kèo bóng đá hôm nay và ngày mai Thoát chỉ xảy ra nếuBoolean-biểu hiệnlà đúng. Nếu không thì, Kiểm soát chuyển sang câu lệnh sauThoát.

Thoátcó thể được sử dụng với tất cả các loại của các vòng; nó không giới hạn sử dụng với vô điều kiện vòng kèo bóng đá hôm nay và ngày mai.

kèo bóng đá hôm nay và ngày mai được sử dụng vớiBắt đầukhối,ThoátChuyển kiểm soát sang tiếp theo tuyên bố sau kèo bóng đá hôm nay và ngày mai kết thúc khối. Lưu ý rằng một nhãn phải được sử dụng cho mục đích này; một không ghi nhãnThoátKhông bao giờ được coi là phù hợp vớiBắt đầukhối. (Đây là kèo bóng đá hôm nay và ngày mai sự thay đổi từ Pre-8.4 Phát hànhPostgreSQL,, sẽ cho phép không được ghi nhãnThoátĐể phù hợp với Abắt đầukhối.)

Ví dụ:

31294_31733

39.6.3.3.Tiếp tục

Tiếp tục [ nhãn ] [kèo bóng đá hôm nay và ngày maiBoolean-biểu hiện ];

nếu khôngnhãnđược đưa ra, The Tiếp theo lặp lại của vòng lặp trong cùng được bắt đầu. Đó là, tất cả Các tuyên bố còn lại trong thân vòng được bỏ qua, và Kiểm soát trở về biểu thức điều kèo bóng đá hôm nay và ngày mai vòng lặp (nếu có) để Xác định xem một vòng lặp vòng khác là cần thiết. Nếu nhưnhãnCó mặt, nó Chỉ định nhãn của vòng kèo bóng đá hôm nay và ngày mai mà thực thi sẽ tiếp tục.

nếukèo bóng đá hôm nay và ngày maiđược chỉ định, tiếp theo kèo bóng đá hôm nay và ngày mai lại của vòng kèo bóng đá hôm nay và ngày mai chỉ được bắt đầu nếuBoolean-biểu hiệnlà đúng. Nếu không thì, Kiểm soát chuyển sang câu lệnh sauTiếp tục.

Tiếp tụccó thể được sử dụng với tất cả các loại vòng kèo bóng đá hôm nay và ngày mai; nó không giới hạn sử dụng với vô điều kiện vòng kèo bóng đá hôm nay và ngày mai.

Ví dụ:

Vòng lặp
    - Một số tính toán
    Thoát kèo bóng đá hôm nay và ngày mai đếm 100;
    Tiếp tục kèo bóng đá hôm nay và ngày mai đếm <50;
    - Một số tính toán để đếm trong [50 .. 100]
Vòng lặp cuối;

39.6.3.4.trong kèo bóng đá hôm nay và ngày mai

[<<nhãn ]
TRONG kèo bóng đá hôm nay và ngày maiBoolean-biểu hiệnvòng kèo bóng đá hôm nay và ngày maicâu33585_33598 Nhãn ];

Thetrong kèo bóng đá hôm nay và ngày maiCâu lệnh kèo bóng đá hôm nay và ngày mai lại a trình tự các câu lệnh miễn làBoolean-biểu hiệnĐánh giá thành true. Biểu thức được kiểm tra ngay trước mỗi mục vào vòng kèo bóng đá hôm nay và ngày mai thân hình.

Ví dụ:

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

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

39.6.3.5.cho(biến thể số nguyên)

[<<nhãn ]
VÌtêntrong [đảo ngược]Biểu thức..Biểu thức[bởiBiểu thức ] vòng kèo bóng đá hôm nay và ngày maiCâuvòng kèo bóng đá hôm nay và ngày mai cuối [ nhãn ];

Hình thức này củachoTạo kèo bóng đá hôm nay và ngày mai vòng lặp Rằng lặp đi lặp lại trên kèo bóng đá hôm nay và ngày mai loạt các giá trị số nguyên. Biếntênđược xác định tự động dưới dạng loạiSố nguyên35138_3538835406_35410mệnh đề không được chỉ định, bước kèo bóng đá hôm nay và ngày mai là 1, nếu không thì đó là Giá trị được chỉ định trongbởimệnh đề, mà kèo bóng đá hôm nay và ngày mai lần nữa được đánh giá kèo bóng đá hôm nay và ngày mai lần trên mục nhập vòng lặp. Nếu nhưđảo ngượcđược chỉ định thì giá trị bước là bị trừ, thay vì thêm, sau mỗi lần kèo bóng đá hôm nay và ngày mai.

kèo bóng đá hôm nay và ngày mai số ví dụ về số nguyênchovòng kèo bóng đá hôm nay và ngày mai:

Đối với tôi trong 1..10 vòng kèo bóng đá hôm nay và ngày mai
    - Tôi sẽ đảm nhận các giá trị 1,2,3,4,5,6,7,8,9,10 trong vòng kèo bóng đá hôm nay và ngày mai
Kết thúc vòng kèo bóng đá hôm nay và ngày mai;

Đối với tôi trong đảo ngược 10..1 vòng kèo bóng đá hôm nay và ngày mai
    - Tôi sẽ đảm nhận các giá trị 10,9,8,7,6,5,4,3,2,2 trong vòng kèo bóng đá hôm nay và ngày mai trong vòng kèo bóng đá hôm nay và ngày mai
Kết thúc vòng kèo bóng đá hôm nay và ngày mai;

Đối với tôi ngược 10..1 bằng 2 vòng kèo bóng đá hôm nay và ngày mai
    - Tôi sẽ đảm nhận các giá trị 10,8,6,4,2 trong vòng kèo bóng đá hôm nay và ngày mai
Vòng kèo bóng đá hôm nay và ngày mai cuối;

36191_36272đảo ngượctrường hợp), The Cơ thể vòng kèo bóng đá hôm nay và ngày mai hoàn toàn không được thực hiện. Không có lỗi được nêu ra.

Nếu Anhãnđược đính kèm ThechoVòng lặp sau đó vòng lặp số nguyên Biến có thể được tham chiếu với kèo bóng đá hôm nay và ngày mai tên đủ điều kiện, sử dụng đónhãn.

39.6.4. Vòng kèo bóng đá hôm nay và ngày mai qua truy vấn Kết quả

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

[<<nhãn ]
VÌTargetinTruy vấnvòng kèo bóng đá hôm nay và ngày maicâuvòng kèo bóng đá hôm nay và ngày mai cuối [ nhãn ];

TheTargetlà kèo bóng đá hôm nay và ngày mai bản ghi Biến, biến hàng hoặc danh sách phân tách dấu phẩy của vô hướng Biến. TheTargetIS được gán liên tiếp cho mỗi hàng doTruy vấnvà thân vòng được thực thi cho mỗi hàng. Đây là kèo bóng đá hôm nay và ngày mai ví dụ:

37727_38413

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

TheTruy vấnĐược sử dụng trong loại này củachoCâu lệnh có thể là bất kỳ SQL nào lệnh trả về hàng cho người gọi:Chọnlà trường hợp phổ biến nhất, nhưng bạn cũng có thể sử dụngChèn, Cập nhậthoặcXóavới kèo bóng đá hôm nay và ngày maiTrở vềmệnh đề. kèo bóng đá hôm nay và ngày mai số tiện ích Các lệnh nhưGiải thíchSẽ hoạt động cũng vậy.

PL/PGSQLBiến là được thay thế kèo bóng đá hôm nay và ngày maio văn bản truy vấn và kế hoạch truy vấn được lưu trong bộ nhớ cache để sử dụng lại có thể, như đã thảo luận chi tiết trongPhần 39.10.1Phần 39.10.2.

Thefor-in-ExecuteCâu lệnh là kèo bóng đá hôm nay và ngày mai cách khác để lặp lại trên các hàng:

[<<nhãn ]
VÌTargettrong thực thitext_expression[Sử dụngBiểu thức[, ...]] vòng kèo bóng đá hôm nay và ngày maiCâuvòng kèo bóng đá hôm nay và ngày mai kết thúc [ nhãn ];

Đây giống như mẫu trước, ngoại trừ truy vấn nguồn được chỉ định làm biểu thức chuỗi, được đánh giá và được hoàn trả trên mỗi mục nhập kèo bóng đá hôm nay và ngày maiochoVòng lặp. Điều này cho phép lập trình viên chọn tốc độ của kèo bóng đá hôm nay và ngày mai truy vấn được định sẵn hoặc tính linh hoạt của kèo bóng đá hôm nay và ngày mai truy vấn động, giống như với kèo bóng đá hôm nay và ngày mai đơn giảnthực thiTuyên bố. BẰNG vớithực thi, giá trị tham số có thể là được chèn kèo bóng đá hôm nay và ngày maio lệnh động thông quaSử dụng.

40592_40727Phần 39.7.4.

39.6.5. Vòng kèo bóng đá hôm nay và ngày mai qua các mảng

TheforeachVòng kèo bóng đá hôm nay và ngày mai giống nhưchoVòng lặp, nhưng thay vì lặp lại Thông qua các hàng được trả về bởi kèo bóng đá hôm nay và ngày mai truy vấn SQL, nó lặp đi qua các yếu tố của kèo bóng đá hôm nay và ngày mai giá trị mảng. (Nói chung,foreachcó nghĩa là để lặp qua các thành phần của kèo bóng đá hôm nay và ngày mai biểu thức có giá trị tổng hợp; các biến thể để lặp qua vật liệu tổng hợp bên cạnh mảng có thể được thêm vào trong tương lai.)foreachTuyên bố để lặp qua kèo bóng đá hôm nay và ngày mai mảng là:

[<<nhãn ]
ForeachTarget[SliceSố ] trong mảngBiểu thứcvòng kèo bóng đá hôm nay và ngày maiCâuvòng kèo bóng đá hôm nay và ngày mai kết thúc [ Nhãn ];

không cóSlicehoặc nếuSlice 0được chỉ định, vòng kèo bóng đá hôm nay và ngày mai kèo bóng đá hôm nay và ngày mai qua Các yếu tố riêng lẻ của mảng được tạo ra bằng cách đánh giáBiểu thức. TheTargetBiến được gán cho mỗi phần tử giá trị theo trình tự và cơ thể vòng lặp được thực thi cho mỗi yếu tố. Đây là kèo bóng đá hôm nay và ngày mai ví dụ về việc lặp lại các yếu tố của kèo bóng đá hôm nay và ngày mai mảng số nguyên:

Tạo chức năng Sum (int []) trả về int8 dưới dạng $$
TUYÊN BỐ
  s int8: = 0;
  x int;
BẮT ĐẦU
  Foreach x trong mảng $ 1
  Vòng kèo bóng đá hôm nay và ngày mai
    s: = s + x;
  Kết thúc vòng kèo bóng đá hôm nay và ngày mai;
  Trả lại s;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Các yếu tố được truy cập theo thứ tự lưu trữ, bất kể Số lượng kích thước mảng. Mặc dùTargetthường chỉ là một biến duy nhất, Nó có thể là một danh sách các biến kèo bóng đá hôm nay và ngày mai lặp qua một mảng Giá trị tổng hợp (bản ghi). Trong trường hợp đó, cho mỗi mảng phần tử, các biến được gán từ các cột liên tiếp của giá trị tổng hợp.

với tích cựcSliceGiá trị,foreachkèo bóng đá hôm nay và ngày mai lại qua các lát cắt của Mảng thay vì các yếu tố đơn lẻ. TheSliceGiá trị phải là hằng số nguyên không lớn hơn số lượng kích thước của mảng. TheTargetBiến phải là kèo bóng đá hôm nay và ngày mai mảng và nó nhận được các lát liên tiếp của giá trị mảng, trong đó mỗi lát có số lượng kích thước được chỉ định bởiSlice. Đây là kèo bóng đá hôm nay và ngày mai ví dụ về việc lặp lại thông qua các lát kèo bóng đá hôm nay và ngày mai chiều:

Tạo hàm scan_rows (int []) trả về void dưới dạng $$
TUYÊN BỐ
  x int [];
BẮT ĐẦU
  Foreach x lát 1 trong mảng $ 1
  Vòng kèo bóng đá hôm nay và ngày mai
    Nâng cao thông báo 'hàng = %', x;
  Kết thúc vòng kèo bóng đá hôm nay và ngày mai;
KẾT THÚC;
$$ Ngôn ngữ plpgsql;

Chọn scan_rows (mảng [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]);

Thông báo: hàng = 1,2,3

39.6.6. Bẫy lỗi

Theo mặc định, mọi lỗi xảy ra trongPL/PGSQLchức năng hủy bỏ thực thi chức năng, và thực sự của giao dịch xung quanh là tốt. Bạn có thể bẫy lỗi và khôi phục từ chúng bằng cách sử dụngbắt đầukhối vớiNgoại lệmệnh đề. Cú pháp là kèo bóng đá hôm nay và ngày mai phần mở rộng của Cú pháp bình thường cho kèo bóng đá hôm nay và ngày maiBắt đầukhối:

[<<Nhãn ]
[khai báoKhai báo ]
BẮT ĐẦUcâuNgoại lệ
    kèo bóng đá hôm nay và ngày maiđiều kiện[hoặcđiều kiện...] Sau đóHandler_statements[kèo bóng đá hôm nay và ngày maiđiều kiện[hoặcđiều kiện...] Sau đóHandler_statements...]
KẾT THÚC;

45387_45456​​Câu, và sau đó Kiểm soát chuyển sang câu lệnh tiếp theo saukết thúc. Nhưng nếu xảy ra lỗi trongcâu, Xử lý thêm củacâubị bỏ rơi, và kiểm soát truyền chongoại lệDanh sách. Danh sách được tìm kiếm cho đầu tiênđiều kiệnkhớp với lỗi mà xảy ra. Nếu tìm thấy kèo bóng đá hôm nay và ngày mai trận đấu, tương ứngHandler_statementsđược thực thi, và sau đó Kiểm soát chuyển sang câu lệnh tiếp theo saukết thúc. Nếu không tìm thấy đối sánh, lỗi truyền ra như thểNgoại lệmệnh đề hoàn toàn không ở đó: lỗi có thể bị bắt bởi kèo bóng đá hôm nay và ngày mai cái kèm theo chặn vớiNgoại lệhoặc nếu có Không có nó hủy bỏ xử lý chức năng.

Theđiều kiệnTên có thể Bất kỳ trong số đó được hiển thị trongPostgreSQL: Tài. kèo bóng đá hôm nay và ngày mai tên danh mục phù hợp với bất kỳ lỗi trong danh mục của nó. Tên điều kiện đặc biệtkháckhớp với mọi loại lỗi ngoại trừquery_canceled46788_46839query_canceledBY Tên.) Tên điều kiện không nhạy cảm trường hợp. Ngoài ra, kèo bóng đá hôm nay và ngày mai lỗi Điều kiện có thể được chỉ định bởiSQLSTATEMã; Ví dụ: đây là tương đương:

kèo bóng đá hôm nay và ngày mai Division_by_zero sau đó ...
kèo bóng đá hôm nay và ngày mai sqlstate '22012' thì ...

Nếu xảy ra lỗi mới trong phạm vi đã chọnHandler_statements, Không thể bắt được bởi điều nàyngoại lệmệnh đề, nhưng là tuyên truyền ra. kèo bóng đá hôm nay và ngày mai xung quanhNgoại lệmệnh đề có thể bắt được nó.

kèo bóng đá hôm nay và ngày mai lỗi bị bắt bởiNgoại lệmệnh đề, các biến cục bộ củaPL/PGSQLHàm vẫn còn như chúng là kèo bóng đá hôm nay và ngày mai lỗi xảy ra, nhưng tất cả các thay đổi đối với Trạng thái cơ sở dữ liệu liên tục trong khối được quay lại. BẰNG Một ví dụ, xem xét đoạn này:

chèn vào các giá trị mytab (firstName, lastName) ('tom', 'jones');
BẮT ĐẦU
    Cập nhật myTab đặt FirstName = 'joe' trong đó lastName = 'jones';
    x: = x + 1;
    y: = x / 0;
NGOẠI LỆ
    kèo bóng đá hôm nay và ngày mai Division_by_zero sau đó
        Nâng cao thông báo 'Caught Division_by_zero';
        Trả lại x;
KẾT THÚC;

Khi điều kèo bóng đá hôm nay và ngày mai đạt được gán choy, nó sẽ thất bại với ADivision_by_zerolỗi. Điều này sẽ bị bắt bởi TheNgoại lệmệnh đề. Giá trị đã trở lại trongreturnTuyên bố sẽ là giá trị gia tăng củax, nhưng hiệu ứng củaCập nhậtlệnh sẽ đã được lăn lại. TheChènTuy nhiên, lệnh trước khối không được quay lại, vì vậy Kết quả cuối cùng là cơ sở dữ liệu chứaTom JoneskhôngJoe Jones.

Tip:kèo bóng đá hôm nay và ngày mai khối chứangoại lệmệnh đề là nhiều hơn đáng kể đắt tiền để vào và thoát hơn kèo bóng đá hôm nay và ngày mai khối mà không có kèo bóng đá hôm nay và ngày mai. Do đó, không sử dụngNgoại lệKhông cần.

Ví dụ 39-2. Ngoại lệ vớiCập nhật/Chèn

Ví dụ này sử dụng xử lý ngoại lệ để thực hiệnCập nhậthoặcChèn, kèo bóng đá hôm nay và ngày mai thích hợp:

Tạo bảng DB (khóa chính INT, văn bản B);

Tạo chức năng Merge_db (khóa Int, văn bản dữ liệu) trả về void AS
$$
BẮT ĐẦU
    Vòng lặp
        - Trước tiên hãy thử cập nhật khóa
        Cập nhật db đặt b = dữ liệu trong đó a = phím;
        Nếu được tìm thấy sau đó
            TRỞ LẠI;
        Kết thúc nếu;
        - không có ở đó, vì vậy hãy cố gắng chèn chìa khóa
        - Nếu người khác chèn cùng một khóa đồng thời,
        -chúng ta có thể bị thất bại duy nhất
        BẮT ĐẦU
            Chèn vào các giá trị db (a, b) (khóa, dữ liệu);
            TRỞ LẠI;
        Ngoại lệ kèo bóng đá hôm nay và ngày mai độc đáo_violation sau đó
            - Không làm gì, và lặp lại để thử cập nhật lại.
        KẾT THÚC;
    Kết thúc vòng lặp;
KẾT THÚC;
$$
Ngôn ngữ plpgsql;

Chọn Merge_db (1, 'David');
Chọn Merge_DB (1, 'Dennis');

Mã hóa này giả địnhđộc đáo_violationLỗi là do50474_50482, và không phải, nói, kèo bóng đá hôm nay và ngày maiChèntrong kèo bóng đá hôm nay và ngày mai hàm kích hoạt trên bàn. Nó cũng có thể sai nếu có nhiều hơn kèo bóng đá hôm nay và ngày mai Chỉ mục duy nhất trên bảng, vì nó sẽ thử lại hoạt động Bất kể chỉ số nào gây ra lỗi. An toàn hơn có thể có bằng cách sử dụng các tính năng được thảo luận tiếp theo để kiểm tra xem có Lỗi bị mắc kẹt là lỗi được mong đợi.

39.6.6.1. Có được thông tin về kèo bóng đá hôm nay và ngày mai lỗi

51100_51264PL/PGSQL: các biến đặc biệt vàNhận chẩn đoán xếp chồnglệnh.

Trong kèo bóng đá hôm nay và ngày mai trình xử lý ngoại lệ, biến đặc biệtSQLSTATEChứa mã lỗi tương ứng với ngoại lệ đã được nâng lên (tham khảoBảng A-1Để biết danh sách các mã lỗi có thể). Biến đặc biệtSQLERRMChứa thông báo lỗi liên kết với ngoại lệ. Các biến này không được xác định Trình xử lý ngoại lệ bên ngoài.

Trong kèo bóng đá hôm nay và ngày mai người xử lý ngoại lệ, người ta cũng có thể lấy lại thông tin về ngoại lệ hiện tại bằng cách sử dụngNhận chẩn đoán xếp chồnglệnh, có biểu mẫu:

Nhận chẩn đoán xếp chồngBiến=Mục[, ...52286_52291

mỗiMụclà kèo bóng đá hôm nay và ngày mai từ khóa Xác định giá trị trạng thái sẽ được gán cho được chỉ định Biến (phải là loại dữ liệu phù hợp để nhận Nó). Các mục trạng thái hiện có được hiển thị trongBảng 39-1.

Bảng 39-1. Giá trị chẩn đoán lỗi

tên loại Mô tả
return_sqlstate Text Mã lỗi SQLSTATE của ngoại lệ
message_text Text Văn bản của thông báo chính của ngoại lệ
pg_exception_detail Text văn bản của thông báo chi tiết ngoại lệ, nếu bất kì
pg_exception_hint Text Văn bản của thông báo gợi ý ngoại lệ, nếu bất kì
pg_exception_context Text dòng văn bản mô tả ngăn xếp cuộc gọi

Nếu ngoại lệ không đặt giá trị cho kèo bóng đá hôm nay và ngày mai mặt hàng, trống Chuỗi sẽ được trả về.

Đây là kèo bóng đá hôm nay và ngày mai ví dụ:

54425_54754