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 cách đọc kèo bóng đá trang chohiện tạiPhiên bản hoặc cách đọc kèo bóng đá 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 cách đọc kèo bóng đá

Cấu trúc điều cách đọc kèo bóng đá có lẽ là hữu ích nhất (và quan trọng) một phần củaPL/PGSQL. VớiPL/PGSQLS điều cách đọc kèo bóng đá cấu trúc, bạn có thể thao tácPostgreSQLDữ liệu trong rất linh hoạt và cách đọc kèo bóng đá 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ừ cách đọc kèo bóng đá hàm:returntrở lại tiếp theo.

39.6.1.1.return

returnBiểu thức;

returnvới cách đọc kèo bóng đá 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ề cách đọc kèo bóng đá tập hợp.

cách đọc kèo bóng đá 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.

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 cách đọc kèo bóng đá Biểu thức saureturn.

Giá trị trả về của hàm không thể được xác định. Nếu điều cách đọc kèo bóng đá đạ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, cách đọc kèo bóng đá 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 đó cách đọc kèo bóng đáreturnCâ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 thichuỗi lệnh[Sử dụngBiểu thức[, ...]];

cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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ề14920_15006Return NextTruy vấn trả vềcó thể được kết hợp tự do trong A chức năng hoàn trả cách đọc kèo bóng đá lần, trong trường hợp đó kết quả của chúng sẽ được nối.

Return Next15295_1530915312_15499PL/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. cách đọc kèo bóng đá 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 cách đọc kèo bóng đá đạ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 vào chuỗi truy vấn được tính toán thông quasử dụng, theo cách đọc kèo bóng đá 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ư cách đọc kèo bóng đá 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 Recordcách đọc kèo bóng đá có nhiều tham số đầu ra hoặcsetofSOMEYPEcách đọc kèo bóng đá chỉ có một tham số đầu ra của loạiSOMEYPE, để tạo cách đọc kèo bóng đá chức năng đặt lại với tham số đầu ra.

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

17105_17588

Lưu ý:Việc triển khai hiện tại củaReturn Nexttrở lại Truy vấnLưu trữ toàn bộ tập kết quả trước cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 vào đĩ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 thi 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ức19561_19567:

  • trường hợp ... cách đọc kèo bóng đá ... sau đó ... khác ... Trường hợp kết thúc

  • trường hợp cách đọc kèo bóng đá ... sau đó ... khác ... kết thúc TRƯỜNG HỢP

39.6.2.1.if-then

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

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ụ:

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;

39.6.2.2.if-then-else

nếuBoolean-biểu hiệnsau đócâu lệnhkhácCâukế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 cách đọc kèo bóng đá 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;
21477_21602

39.6.2.3.IF-THEN-ELEF

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

Đôi cách đọc kèo bóng đá 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 cách đọc kèo bóng đá số lựa chọn thay thế lần lượt. ThenếuĐiều kiện được kiểm tra liên tiếp cho đến cách đọc kèo bóng đá cái đầu tiên là đúng được tìm thấy. Sau đó (các) câu lệnh liên quan được thực thi, sau đó kiểm soát chuyển sang câu lệnh tiếp theo sauKế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ó22915_22919Điều kiện là đúng, sau đó làkháckhối (nếu có) được thực thi.

Đây là cách đọc kèo bóng đá 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.

cách đọc kèo bóng đá cách thay thế để hoàn thành cùng cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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ụngelsifcách đọc kèo bóng đá có nhiều lựa chọn thay thế.

39.6.2.4. Đơn giảncase

caseBiểu hiện tìm kiếmcách đọc kèo bóng đáBiểu thức[, Biểu thức[...]] sau đócâu[cách đọc kèo bóng đáBiể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ủa24954_24960cung 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á (cách đọc kèo bóng đá lần) và liên tiếp so với mỗiBiểu thứctrongcách đọc kèo bóng đámệnh đề. Nếu cách đọc kèo bóng đá 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 theocách đọc kèo bóng đáBiểu thức không được đánh giá.) Nếu không phù hợp được tìm thấy,khá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à cách đọc kèo bóng đá ví dụ đơn giản:

trường hợp x
    cách đọc kèo bóng đá 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
    cách đọc kèo bóng đáBoolean-biểu hiệnsau đócâu lệnh[cách đọc kèo bóng đáBoolean-biểu hiệnsau đócâu...26471_26478kháccâu lệnh ]
Trường hợp kết thúc;

Hình thứ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ỗicách đọc kèo bóng đámệnh đềBoolean-biểu hiệnIS lần lượt được đánh giá, cho đến cách đọc kèo bóng đá phát hiện ra sản lượng26910_26916. Sau đó tương ứngcâuđượ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 theocách đọc kèo bóng đáBiểu thức không được đánh giá.) Nếu không Kết quả đúng được tìm thấy,khác Câuđược thực thi; Nhưng nếu nhưkháckhông có mặt, sau đó Acase_not_foundNgoại lệ là nâng lên.

Đây là cách đọc kèo bóng đá ví dụ:

trường hợp
    cách đọc kèo bóng đá x từ 0 đến 10 thì
        MSG: = 'Giá trị nằm trong khoảng từ 0 đến mười';
    cách đọc kèo bóng đá 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-elel, ngoại trừ Đối với quy tắc đạt được cách đọc kèo bóng đá 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 cách đọc kèo bóng đá

vớivòng cách đọc kèo bóng đá, Thoát, Tiếp tục, trong cách đọc kèo bóng đá, cho,, VàforeachCâu lệnh, bạn có thể Sắp xếp cho của bạnPL/PGSQLhàm để cách đọc kèo bóng đá lại một loạt các lệnh.

39.6.3.1.vòng cách đọc kèo bóng đá

[<<nhãn ]
Vòng cách đọc kèo bóng đáCâuvòng cách đọc kèo bóng đá cuối [ nhãn ];

Vòng cách đọc kèo bóng đáXác định vô điều kiện Vòng lặp được lặp lại vô thời hạn cho đến cách đọc kèo bóng đá bị chấm dứt bởi mộtThoáthoặcreturnCâu lệnh. Tùy chọnnhãncó thể được sử dụng bởiThoátTiếp tụcCác câu trong các vòng cách đọc kèo bóng đá lồng nhau để chỉ định vòng cách đọc kèo bóng đá nào Các câu lệnh tham khảo.

39.6.3.2.Thoát

Thoát [ Nhãn ] [cách đọc kèo bóng đáBoolean-biểu hiện ];

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

nếucách đọc kèo bóng đáđược chỉ định, vòng cách đọc kèo bóng đá 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 cách đọc kèo bóng đá.

cách đọc kèo bóng đá được sử dụng vớiBắt đầukhối,ThoátChuyển kiểm soát sang tiếp theo tuyên bố sau cách đọc kèo bóng đá 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à cách đọc kèo bóng đá 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ụ:

31297_31736

39.6.3.3.Tiếp tục

Tiếp tục [ nhãn ] [cách đọc kèo bóng đáBoolean-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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá mà thực thi sẽ tiếp tục.

nếucách đọc kèo bóng đáđược chỉ định, tiếp theo cách đọc kèo bóng đá lại của vòng cách đọc kèo bóng đá chỉ được bắt đầu nếuBoolean-biểu hiện32735_32802Tiếp tục.

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

Ví dụ:

33052_33208

39.6.3.4.trong cách đọc kèo bóng đá

[<<nhãn ]
TRONG cách đọc kèo bóng đáBoolean-biểu hiệnVòng cách đọc kèo bóng đáCâuvòng cách đọc kèo bóng đá cuối [ nhãn ];

Thetrong cách đọc kèo bóng đáCâu lệnh cách đọc kèo bóng đá 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 cách đọc kèo bóng đá thân hình.

Ví dụ:

34009_34179

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 cách đọc kèo bóng đácâuvòng cách đọc kèo bóng đá cuối [ nhãn ];

Hình thức này củachoTạo một vòng cách đọc kèo bóng đá Rằng cách đọc kèo bóng đá đi cách đọc kèo bóng đá 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 (bất kỳ định nghĩa hiện có nào của tên biến là bị bỏ qua trong vòng lặp). Hai biểu thức đưa ra giới hạn dưới và trên của phạm vi được đánh giá một lần cách đọc kèo bóng đá Nhập vòng lặp. Nếubởimệnh đề không được chỉ định, bước cách đọc kèo bóng đá là 1, nếu không thì đó là Giá trị được chỉ định trongbởimệnh đề, mà một lần nữa được đánh giá một lần trên mục nhập vòng cách đọc kèo bóng đá. 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 cách đọc kèo bóng đá.

cách đọc kèo bóng đá số ví dụ về số nguyênchovòng cách đọc kèo bóng đá:

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

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

Đối với tôi ngược 10..1 bằng 2 vòng cách đọc kèo bóng đá
    - Tôi sẽ đảm nhận các giá trị 10,8,6,4,2 trong vòng cách đọc kèo bóng đá
Vòng cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá sau đó vòng cách đọc kèo bóng đá số nguyên Biến có thể được tham chiếu với một tên đủ điều kiện, sử dụng đónhãn.

39.6.4. Vòng cách đọc kèo bóng đá qua truy vấn Kết quả

Sử dụng cách đọc kèo bóng đá loại khácchoVòng cách đọc kèo bóng đá, bạn có thể cách đọc kèo bóng đá 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ÌTargetinTruy vấnvòng cách đọc kèo bóng đáCâuvòng cách đọc kèo bóng đá cuối [ nhãn ];

TheTargetlà cách đọc kèo bóng đá 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à cách đọc kèo bóng đá ví dụ:

37730_38416

38429_38463Thoá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 cách đọc kèo bóng đá.

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 cách đọc kèo bóng đáTrở vềmệnh đề. cách đọc kèo bóng đá 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ế vào văn bản truy vấn và kế hoạch truy vấn được lưu trữ để 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à Một cách khác để cách đọc kèo bóng đá lại trên các hàng:

[<<nhãn ]
VÌTargettrong thực thiText_Expression[Sử dụngBiểu thức[, ...]] vòng cách đọc kèo bóng đácâuvòng cách đọc kèo bóng đá cuối [ nhãn ];

Đây giống như hình thức 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 vàochoVòng cách đọc kèo bóng đá. Đ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 thiTuyên bố. BẰNG vớithực thi, giá trị tham số có thể là được chèn vào lệnh động thông quasử dụng.

Một cách khác để chỉ định truy vấn có kết quả cách đọc kèo bóng đá đi cách đọc kèo bóng đá lại là tuyên bố nó là một con trỏ. Đây là được mô tả trongPhần 39.7.4.

39.6.5. Vòng cách đọc kèo bóng đá qua các mảng

TheforeachVòng cách đọc kèo bóng đá giống nhưcho41071_41220foreachcó nghĩa là để cách đọc kèo bóng đá qua các thành phần của một biểu thức có giá trị tổng hợp; các biến thể để cách đọc kèo bóng đá 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ố để cách đọc kèo bóng đá qua một mảng là:

[<<nhãn ]
ForeachTarget[SliceSố ] trong mảngBiểu thứcvòng cách đọc kèo bóng đáCâuvòng cách đọc kèo bóng đá cuối [ nhãn ];

khôngSlicehoặc nếuSlice 0được chỉ định, vòng cách đọc kèo bóng đá cách đọc kèo bóng đá 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 cách đọc kèo bóng đá được thực thi cho mỗi yếu tố. Đây là một ví dụ về việc cách đọc kèo bóng đá lại các yếu tố của một 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 cách đọc kèo bóng đá
    s: = s + x;
  Kết thúc vòng cách đọc kèo bóng đá;
  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 cách đọc kèo bóng đá 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ị,foreachcách đọc kèo bóng đá 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. TheTarget43409_43566Slice. Đây là một ví dụ về việc cách đọc kèo bóng đá lại thông qua các lát một 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 cách đọc kèo bóng đá
    Nâng cao thông báo 'hàng = %', x;
  Kết thúc vòng cách đọc kèo bóng đá;
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

44171_44196

Theo mặc định, mọi lỗi xảy ra trong APL/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 đọc kèo bóng đá sử dụngbắt đầukhối vớiNgoại lệmệnh đề. Cú pháp là cách đọc kèo bóng đá phần mở rộng của Cú pháp bình thường cho cách đọc kèo bóng đábắt đầukhối:

[<<nhãn ]
[khai báoKhai báo ]
BẮT ĐẦUcâuNgoại lệ
    cách đọc kèo bóng đáđiều kiện[hoặcđiều kiện...] Sau đóHandler_statements[cách đọc kèo bóng đáđiều kiện[hoặcđiều kiện...] sau đóHandler_statements...]
KẾT THÚC;

Nếu không xảy ra lỗi, hình thức khối này chỉ đơn giản là thực thi tất cả Thecâ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ệnPhù hợp với lỗi mà xảy ra. Nếu tìm thấy cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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. cách đọc kèo bóng đá 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_canceled. (Nó là có thể, nhưng thường không khôn ngoan, để bẫyquery_canceledBY Tên.) Tên điều kiện không nhạy cảm trường hợp. Ngoài ra, cách đọc kèo bóng đá lỗi Điều kiện có thể được chỉ định bởiSQLSTATEMã; Ví dụ: đây là tương đương:

cách đọc kèo bóng đá Division_by_zero sau đó ...
cách đọc kèo bóng đá 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ày47326_47337mệnh đề, nhưng là tuyên truyền ra. cách đọc kèo bóng đá xung quanhngoại lệmệnh đề có thể bắt được nó.

cách đọc kèo bóng đá 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à cách đọc kèo bóng đá 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Ệ
    cách đọc kèo bóng đá 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 cách đọc kèo bóng đá đạ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 cuộn trở lại, vì vậy Kết quả cuối cùng là cơ sở dữ liệu chứaTom JoneskhôngJoe Jones.

Tip:cách đọc kèo bóng đá 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 cách đọc kèo bóng đá khối mà không có cách đọc kèo bóng đá. Do đó, không sử dụngNgoại lệKhông cần.

Trong cách đọc kèo bóng đá trình xử lý ngoại lệ,SQLSTATEBiến chứa mã lỗi mà tương ứng với ngoại lệ đã được nâng lên (tham khảoBảng A-1cho a Danh sách các mã lỗi có thể). TheSQLERRM49504_49639

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, cách đọc kèo bóng đá 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ệ cách đọc kèo bóng đá độ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');

Ví dụ này giả sửđộc đáo_violationLỗi là doChèn, chứ không phải bởiChènHàm kích hoạt trên bảng.