Phiên bản được hỗ trợ:hiện tại(17)16/15/14/13
Phiên bản phát triển: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

43.6.Cấu trúc điều tỷ lệ kèo bóng đá 88#

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

43.6.1.Trở về từ tỷ lệ kèo bóng đá 88 hàm#

Có hai lệnh có sẵn cho phép bạn trả về dữ liệu từ tỷ lệ kèo bóng đá 88 hàm:returnReturn Next.

43.6.1.1.return #

returnBiểu thức;

returnvới biểu thức chấm dứt hàm và trả về giá trị củaBiểu thứccho người gọi. Mẫu này được sử dụng choPL/PGSQLCác chức năng không trả về tỷ lệ kèo bóng đá 88 tập hợp.

Trong tỷ lệ kèo bóng đá 88 hàm trả về loại vô hướng, kết quả của biểu thức sẽ tự động được chuyển vào loại trả về của hàm như được mô tả cho các bài tập. Nhưng để trả về giá trị tổng hợp (hàng), bạn phải viết tỷ lệ kèo bóng đá 88 biểu thức phân phối chính xác bộ cột được yêu cầu.

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

Nếu bạn tuyên bố chức năng trả vềvoid, AreturnCâu lệnh có thể được sử dụng để thoát chức năng sớm; nhưng không viết tỷ lệ kèo bóng đá 88 biểu thức saureturn.

Giá trị trả về của hàm không thể được xác định. Nếu điều tỷ lệ kèo bóng đá 88 đạt đến phần cuối của khối cấp cao nhất của hàm mà không nhấn AreturnCâu lệnh, tỷ lệ kèo bóng đá 88 lỗi thời gian chạy sẽ xảy ra. Hạn chế này không áp dụng cho các chức năng với các tham số đầu ra và các chức năng trả vềvoidTuy nhiên. Trong những trường hợp đóreturnCâu tỷ lệ kèo bóng đá 88nh được tự động thực hiện nếu khối cấp cao nhất kết thúc.

tỷ lệ kèo bóng đá 88 số ví dụ:

- tỷ lệ kèo bóng đá 88 chức năng trả về loại vô hướng

43.6.1.2.Return NextTruy vấn trả về #

Return NextBiểu thức;Truy vấn;chuỗi tỷ lệ kèo bóng đá 88nh[Sử dụngBiểu thức[, ...]];

tỷ lệ kèo bóng đá 88 APL/PGSQLHàm được tuyên bố trả lạisetofSOMEYPE, Quy trình tuân theo hơi khác nhau. Trong trường hợp đó, các mục riêng lẻ để trả lại được chỉ định bởi tỷ lệ kèo bóng đá 88 chuỗitrở lại tiếp theohoặcTruy vấn trả vềtỷ lệ kèo bóng đá 88 lệnh, và sau đó là cuối cùngreturntỷ lệ kèo bóng đá 88nh không có đối số được sử dụng để chỉ ra rằng hàm đã hoàn thành thực thi.Return Nextcó thể được sử dụng với cả tỷ lệ kèo bóng đá 88 loại dữ liệu vô hướng và tổng hợp; với loại kết quả tổng hợp, toàn bộBảngHồicủa kết quả sẽ được trả về.Truy vấn trả vềBổ số 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 xen kẽ tự do trong tỷ lệ kèo bóng đá 88 chức năng hoàn trả lại, trong trường hợp đó, kết quả của chúng sẽ được nối.

Return NextTruy vấn trả vềKhông thực sự trả lại từ hàm - chúng chỉ đơn giản là nối số 0 hoặc nhiều hàng vào tập kết quả của hàm. Thực thi sau đó tiếp tục với câu tỷ lệ kèo bóng đá 88nh tiếp theo trongPL/PGSQLHàm. Như liên tiếpReturn NexthoặcTruy vấn trả lạiCác lệnh được thực thi, tập kết quả được xây dựng. tỷ lệ kèo bóng đá 88 cuối cùngreturn, không có đối số, khiến kiểm soát thoát khỏi hàm (hoặc bạn có thể chỉ để điều tỷ lệ kèo bóng đá 88 đạt đến cuối hàm).

Truy vấn trả lạicó biến thểTruy vấn trả về, trong đó chỉ định truy vấn sẽ được thực thi động. Biểu thức tham số 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 tương tự như trongthực thitỷ lệ kèo bóng đá 88nh.

Nếu bạn khai báo chức năng với tỷ lệ kèo bóng đá 88 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 (các) biến tham số đầu ra sẽ được lưu để trả về cuối cùng như tỷ lệ kèo bóng đá 88 hàng của kết quả.Setof Recordtỷ lệ kèo bóng đá 88 có nhiều tham số đầu ra hoặcsetofSOMEYPEtỷ lệ kèo bóng đá 88 chỉ có một tham số đầu ra của loạiSOMEYPE, Để tạo chức năng hoàn trả lại với tỷ lệ kèo bóng đá 88 tham số đầu ra.

Đây là tỷ lệ kèo bóng đá 88 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);

Đây là tỷ lệ kèo bóng đá 88 ví dụ về chức năng sử dụngTruy vấn trả lại:

Tạo chức năng get_available_flightid (ngày) Trả về số nguyên setof AS

Lưu ý

Việc triển khai hiện tại củatrở lại tiếp theoTruy vấn trả vềLưu trữ toàn bộ tập kết quả trước tỷ lệ kèo bóng đá 88 quay lại từ hàm, như đã thảo luận ở trên. Điều đó có nghĩa là nếu mộtPL/PGSQLHàm tạo ra một tập kết quả rất lớn, hiệu suất có thể kém: Dữ liệu sẽ được ghi vào đĩa để tránh kiệt sức bộ nhớ, nhưng chính chức năng sẽ không quay lại cho đến tỷ lệ kèo bóng đá 88 toàn bộ tập kết quả đượ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 ghi vào đĩa được điều tỷ lệ kèo bóng đá 88 bởiwork_memBiến cấu hình. Quản trị viên có đủ bộ nhớ để lưu trữ tỷ lệ kèo bóng đá 88 bộ kết quả lớn hơn trong bộ nhớ nên xem xét tăng tham số này.

43.6.2.Trở về từ tỷ lệ kèo bóng đá 88 thủ tục#

tỷ lệ kèo bóng đá 88 thủ tục không có giá trị trả về. Do đó, tỷ lệ kèo bóng đá 88 thủ tục có thể kết thúc mà không córeturnTuyên bố. Nếu bạn muốn sử dụngreturnCâu tỷ lệ kèo bóng đá 88nh để thoát mã sớm, chỉ viếtreturnkhông có biểu thức.

Nếu quy trình có tham số đầu ra, tỷ lệ kèo bóng đá 88 giá trị cuối cùng của tỷ lệ kèo bóng đá 88 biến tham số đầu ra sẽ được trả lại cho trình gọi.

43.6.3.Gọi tỷ lệ kèo bóng đá 88 thủ tục#

APL/PGSQLchức năng, thủ tục hoặcdoBlock có thể gọi thủ tục bằng cách sử dụnggọi. tỷ lệ kèo bóng đá 88 tham số đầu ra được xử lý khác với cáchgọiHoạt động trong SQL đơn giản. MỗiouthoặcInoutTham số của thủ tục phải tương ứng với tỷ lệ kèo bóng đá 88 biến tronggọiCâu lệnh và bất cứ điều gì mà thủ tục trả về được gán lại cho biến đó sau tỷ lệ kèo bóng đá 88 nó trả về. Ví dụ:

Tạo quy trình Triple (Inout X Int)

Biến tương ứng với tham số đầu ra có thể là tỷ lệ kèo bóng đá 88 biến đơn giản hoặc trường của biến loại tổng hợp. Hiện tại, nó không thể là tỷ lệ kèo bóng đá 88 yếu tố của tỷ lệ kèo bóng đá 88 mảng.

43.6.4.Điều kiện#

nếucasetỷ lệ kèo bóng đá 88 câu lệnh cho phép bạn thực thi tỷ lệ kèo bóng đá 88 lệnh thay thế dựa trên tỷ lệ kèo bóng đá 88 điều kiện nhất định.PL/PGSQLcó ba dạngnếu:

  • Nếu ... thì ... kết thúc nếu

  • Nếu ... thì ... khác ... kết thúc nếu

  • Nếu ... thì ... elsif ... sau đó ... khác ... kết thúc nếu

và hai dạngcase:

  • trường hợp ... tỷ lệ kèo bóng đá 88 ... sau đó ... khác ... trường hợp kết thúc

  • trường hợp tỷ lệ kèo bóng đá 88 ... sau đó ... khác ... trường hợp kết thúc

43.6.4.1.if-then #

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

if-thenCâu tỷ lệ kèo bóng đá 88nh là dạng đơn giản nhất củanếu. tỷ lệ kèo bóng đá 88 câu giữasau đókết thúc nếusẽ được thực thi nếu điều kiện là đúng. Nếu không, chúng bị bỏ qua.

Ví dụ:

Nếu v_user_id < 0 sau đó

43.6.4.2.if-then-else #

nếuBoolean-biểu hiệnsau đócâukháccâu tỷ lệ kèo bóng đá 88nhkết thúc if;

if-then-elseCâu tỷ lệ kèo bóng đá 88nh thêm vàoif-thenBằng cách cho phép bạn chỉ định tỷ lệ kèo bóng đá 88 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á là null.)

Ví dụ:

Nếu ParentID là null hoặc ParentID = ''
Nếu V_Count 0 Sau đó

43.6.4.3.if-then-elel #

nếuBoolean-biểu hiệnsau đóCâu[elsifBoolean-biểu hiệnsau đóCâu[elsifBoolean-biểu hiện27544_27556Câu...]]khácCâu ]

Đôi tỷ lệ kèo bóng đá 88 có nhiều hơn chỉ hai lựa chọn thay thế.if-then-elelCung cấp tỷ lệ kèo bóng đá 88 phương pháp thuận tiện để kiểm tra tỷ lệ kèo bóng đá 88 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 khi cái đầu tiên được tìm thấy đúng. Sau đó, (các) câu lệnh liên quan được thực thi, sau đó điều tỷ lệ kèo bóng đá 88 chuyển sang câu lệnh tiếp theo saukết thúc nếu. (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à tỷ lệ kèo bóng đá 88 ví dụ:

Nếu số = 0 thì sau đó

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

tỷ lệ kèo bóng đá 88 cách khác để hoàn thành cùng tỷ lệ kèo bóng đá 88 nhiệm vụ là làm tổif-then-elseCâu tỷ lệ kèo bóng đá 88nh, như trong ví dụ sau:

Nếu demo_row.sex = 'm' thì

Tuy nhiên, phương pháp này yêu cầu viết tỷ lệ kèo bóng đá 88 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ụngelsiftỷ lệ kèo bóng đá 88 có nhiều lựa chọn thay thế.

43.6.4.4.Đơn giảncase #

casebiểu hiện tìm kiếmtỷ lệ kèo bóng đá 88Biểu thức[,Biểu thức[...]] Sau đócâu tỷ lệ kèo bóng đá 88nh[tỷ lệ kèo bóng đá 88Biểu thức[,Biểu thức[...]] Sau đóCâu...]kháccâu tỷ lệ kèo bóng đá 88nh ]

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 tỷ lệ kèo bóng đá 88 toán hạng. TheBiểu hiện tìm kiếmđược đánh giá (tỷ lệ kèo bóng đá 88 lần) và liên tiếp so với mỗiBiểu thứctrongtỷ lệ kèo bóng đá 88mệnh đề. Nếu tỷ lệ kèo bóng đá 88 trận đấu được tìm thấy, thì tương ứngcâu tỷ lệ kèo bóng đá 88nhđược thực thi và sau đó điều tỷ lệ kèo bóng đá 88 chuyển sang câu lệnh tiếp theo sautrường hợp kết thúc. (Tiếp theotỷ lệ kèo bóng đá 88Biểu thức không được đánh giá.) Nếu không tìm thấy khớp nào,khác câu tỷ lệ kèo bóng đá 88nhđược thực thi; Nhưng nếukháckhông có mặt, sau đó Acase_not_foundNgoại lệ được nâng lên.

Đây là tỷ lệ kèo bóng đá 88 ví dụ đơn giản:

trường hợp x

43.6.4.5.Đã tìm kiếmcase #

trường hợpBoolean-biểu hiệnsau đócâu[tỷ lệ kèo bóng đá 88Boolean-biểu hiệnsau đócâu...]khácCâu ]

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 tỷ lệ kèo bóng đá 88 biểu thức Boolean. Mỗitỷ lệ kèo bóng đá 88mệnh đềBoolean-biểu hiệnđược đánh giá lần lượt, cho đến tỷ lệ kèo bóng đá 88 tìm thấy sản lượngTRUE. Sau đó tương ứngcâuđược thực thi và sau đó điều tỷ lệ kèo bóng đá 88 truyền sang câu lệnh tiếp theo sautrường hợp kết thúc. (Tiếp theotỷ lệ kèo bóng đá 88Biểu thức không được đánh giá.) Nếu không tìm thấy kết quả đúng nào,khác Câuđược thực thi; Nhưng nếukháckhông có mặt, sau đó Acase_not_foundNgoại lệ được nâng lên.

Đây là tỷ lệ kèo bóng đá 88 ví dụ:

trường hợp

Hình thức này củacasehoàn toàn tương đương vớiif-then-elel, Ngoại trừ quy tắc đạt được sự bỏ quakhácmệnh đề dẫn đến lỗi thay vì không làm gì cả.

43.6.5.tỷ lệ kèo bóng đá 88 vòng lặp đơn giản#

vớiVòng lặp,Thoát,Tiếp tục,trong tỷ lệ kèo bóng đá 88,choforeachCâu tỷ lệ kèo bóng đá 88nh, bạn có thể sắp xếp choPL/PGSQLhàm để lặp lại tỷ lệ kèo bóng đá 88 loạt các lệnh.

43.6.5.1.vòng lặp #

[<<nhãn ]Câuvòng lặp cuối [ nhãn ];

vòng lặpXác định một vòng lặp vô điều kiện được lặp lại vô thời hạn cho đến tỷ lệ kèo bóng đá 88 bị chấm dứt bởi mộtThoáthoặcreturnTuyên bố. Tùy chọnnhãncó thể được sử dụng bởiThoátTiếp tụctỷ lệ kèo bóng đá 88 câu trong tỷ lệ kèo bóng đá 88 vòng lặp lồng nhau để chỉ định tỷ lệ kèo bóng đá 88 câu lệnh nào được đề cập đến.

43.6.5.2.Thoát #

Thoát [ nhãn ] [tỷ lệ kèo bóng đá 88Boolean-biểu hiện ];

nếu khôngnhãnđược đưa ra, vòng lặp trong cùng được chấm dứt và câu tỷ lệ kèo bóng đá 88nh sauKết thúc vòngđượ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 hoặc khối. Sau đó, vòng lặp hoặc khối được đặt tên bị chấm dứt và điều tỷ lệ kèo bóng đá 88 tiếp tục với câu lệnh sau khi vòng lặp/khối tương ứngkết thúc.

nếutỷ lệ kèo bóng đá 88được chỉ định, thoát vòng chỉ xảy ra nếuBoolean-biểu hiệnlà đúng. Nếu không, kiểm soát chuyển sang câu tỷ lệ kèo bóng đá 88nh sauThoát.

Thoátcó thể được sử dụng với tất cả tỷ lệ kèo bóng đá 88 loại vòng lặp; nó không giới hạn sử dụng với tỷ lệ kèo bóng đá 88 vòng vô điều kiện.

tỷ lệ kèo bóng đá 88 được sử dụng vớibắt đầukhối,ThoátChuyển điều tỷ lệ kèo bóng đá 88 cho câu lệnh tiếp theo sau khi 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;ThoátKhông bao giờ được coi là phù hợp với Abắt đầukhối. (Đây là tỷ lệ kèo bóng đá 88 sự thay đổi từ các bản phát hành trước 8.4 củaPOSTGRESQL, sẽ cho phép không được gắn nhãnThoátĐể phù hợp với ABắt đầukhối.)

Ví dụ:

Vòng lặp

43.6.5.3.Tiếp tục #

Tiếp tục [ Nhãn ] [tỷ lệ kèo bóng đá 88Boolean-biểu hiện ];

nếu khôngnhãnđược đưa ra, lần lặp tiếp theo của vòng lặp trong cùng được bắt đầu. Đó là, tất cả các câu lệnh còn lại trong thân vòng được bỏ qua và điều tỷ lệ kèo bóng đá 88 trả về biểu thức điều tỷ lệ kèo bóng đá 88 vòng (nếu có) để xác định xem có cần lặp lại vòng lặp khác hay không.nhãnCó mặt, nó chỉ định nhãn của vòng lặp mà thực thi sẽ được tiếp tục.

nếutỷ lệ kèo bóng đá 88được chỉ định, lần lặp tiếp theo của vòng lặp chỉ được bắt đầu nếuBoolean-biểu hiệnlà đúng. Nếu không, kiểm soát chuyển sang câu tỷ lệ kèo bóng đá 88nh sauTiếp tục.

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

Ví dụ:

Vòng lặp

43.6.5.4.trong tỷ lệ kèo bóng đá 88 #

[<<nhãn ]Boolean-biểu hiệnvòng lặpcâu tỷ lệ kèo bóng đá 88nhvòng lặp cuối [ nhãn ];

Thetrong tỷ lệ kèo bóng đá 88Câu lệnh lặp lại tỷ lệ kèo bóng đá 88 chuỗi 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 phần thân vòng.

Ví dụ:

trong tỷ lệ kèo bóng đá 88 số lượng_owed 0 và gift_certificate_balance 0 Loop

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

[<<nhãn ]têntrong [đảo ngược]Biểu thức..Biểu thức[bởiBiểu thức ] vòng lặpcâuvòng lặp cuối [ nhãn ];

Hình thức này củachoTạo tỷ lệ kèo bóng đá 88 vòng lặp lặp đi lặp lại trên tỷ lệ kèo bóng đá 88 loạt các giá trị số nguyên. Biếntênđược định nghĩa tự động là 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 đều bị bỏ qua trong vòng lặp). Hai biểu thức cho giới hạn dưới và trên của phạm vi được đánh giá một lần tỷ lệ kèo bóng đá 88 vào vòng lặp.bởimệnh đề không được chỉ định Bước lặp là 1, nếu không thì đó là giá trị được chỉ định trongbởimệnh đề, tỷ lệ kèo bóng đá 88 lần nữa được đánh giá tỷ lệ kèo bóng đá 88 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 được trừ, thay vì thêm, sau mỗi lần lặp.

tỷ lệ kèo bóng đá 88 số ví dụ về số nguyênchovòng lặp:

Đối với tôi trong 1..10 vòng lặp

Nếu giới hạn dưới lớn hơn giới hạn trên (hoặc nhỏ hơn, trongđảo ngượctrường hợp), phần thân vòng không được thực thi. Không có lỗi được nêu ra.

Nếu Anhãnđược gắn vàochoVòng lặp sau đó biến vòng số nguyên có thể được tham chiếu với tỷ lệ kèo bóng đá 88 tên đủ điều kiện, sử dụng đónhãn.

43.6.6.Vòng lặp qua kết quả truy vấn#

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

[<<nhãn ]TargetinTruy vấnVòng lặpcâuvòng lặp cuối [ nhãn ];

TheTargetlà biến bản ghi, biến hàng hoặc danh sách tỷ lệ kèo bóng đá 88 biến vô hướng được phân tách bằng dấu phẩy. TheTargetđượ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à tỷ lệ kèo bóng đá 88 ví dụ:

Tạo hàm refresh_mviews () trả về số nguyên dưới dạng $$

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

TheTruy vấnĐược sử dụng trong loại nàychoCâu tỷ lệ kèo bóng đá 88nh có thể là bất kỳ tỷ lệ kèo bóng đá 88nh SQL nào 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ớiTrở vềmệnh đề. tỷ lệ kèo bóng đá 88 số lệnh tiện ích nhưGiải thíchcũng sẽ hoạt động.

PL/PGSQLBiến được thay thế bằng tỷ lệ kèo bóng đá 88 tham số truy vấn và gói truy vấn được lưu trữ để sử dụng lại có thể, như đã thảo luận chi tiết trongPhần 43.11.1Phần 43.11.2.

Thefor-in-ExecuteCâu lệnh là tỷ lệ kèo bóng đá 88 cách khác để lặp lại trên các hàng:

[<<nhãn ]Targettrong thực thitext_expression[Sử dụngBiểu thức[, ...]] vòng lặpcâuvòng lặp cuối [ nhãn ];

Đây giống như biểu 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à trả lời trên mỗi mục nhập vàochoVòng lặp. Điều này cho phép lập trình viên chọn tốc độ của tỷ lệ kèo bóng đá 88 truy vấn được định sẵn hoặc tính linh hoạt của truy vấn động, giống như với tỷ lệ kèo bóng đá 88 đơn giảnthực thiTuyên bố. Như vớithực thi, giá trị tham số có thể được chèn vào tỷ lệ kèo bóng đá 88nh động thông quaSử dụng.

tỷ lệ kèo bóng đá 88 cách khác để chỉ định truy vấn có kết quả nên được lặp đi lặp lại là tuyên bố đó là con trỏ. Điều này được mô tả trongPhần 43.7.4.

43.6.7.Vòng lặp qua tỷ lệ kèo bóng đá 88 mảng#

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

[<<Nhãn ]Target[SliceSố ] trong mảngBiểu thứcvòng lặpcâuvòng lặp cuối [ nhãn ];

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

Tạo hàm sum (int []) trả về int8 dưới dạng $$

tỷ lệ kèo bóng đá 88 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 tỷ lệ kèo bóng đá 88 lặp qua một mảng các giá trị tổng hợp (bản ghi). Trong trường hợp đó, với mỗi phần tử mảng, 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ị,foreachlặp lại thông qua tỷ lệ kèo bóng đá 88 lát của mảng chứ không phải là tỷ lệ kèo bóng đá 88 phần tử đơn. 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à tỷ lệ kèo bóng đá 88 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. Dưới đây là tỷ lệ kèo bóng đá 88 ví dụ về việc lặp lại thông qua các lát tỷ lệ kèo bóng đá 88 chiều:

Tạo chức năng scan_rows (int []) trả về void dưới dạng $$

43.6.8.Bẫy lỗi#

Theo mặc định, mọi lỗi xảy ra trong APL/PGSQLHàm phá thai thực thi chức năng và giao dịch xung quanh. 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à tỷ lệ kèo bóng đá 88 phần mở rộng của cú pháp bình thường cho tỷ lệ kèo bóng đá 88Bắt đầukhối:

[<<nhãn ]khai báoKhai báo ]CâuNgoại lệđiều kiện[hoặcđiều kiện...] Sau đóHandler_statements[tỷ lệ kèo bóng đá 88điều kiện[hoặcđiều kiện...] sau đóHandler_statements...]

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ảCâu, và sau đó điều tỷ lệ kèo bóng đá 88 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êmCâubị bỏ rơi và điều tỷ lệ kèo bóng đá 88 truyền choNgoại lệDanh sách. Danh sách được tìm kiếm cho đầu tiênđiều kiệnKết hợp lỗi xảy ra. Nếu tìm thấy tỷ lệ kèo bóng đá 88 trận đấu, tương ứngHandler_statementsđược thực thi và sau đó điều tỷ lệ kèo bóng đá 88 chuyển sang câu lệnh tiếp theo saukết thúc. Nếu không tìm thấy khớp nào, lỗi sẽ truyền ra như thểNgoại lệmệnh đề hoàn toàn không có: lỗi có thể bị bắt bởi tỷ lệ kèo bóng đá 88 khối kèm theo vớiNgoại lệhoặc nếu không có ai phá hủy việc xử lý chức năng.

Theđiều kiệnTên có thể là bất kỳ tên nào được hiển thị trongPhụ lục A. tỷ lệ kèo bóng đá 88 tên danh mục phù hợp với bất kỳ lỗi trong danh mục của nó.Người kháckhớp với mọi loại lỗi ngoại trừquery_canceledassert_failure. (Có thể, nhưng thường không khôn ngoan, để bẫy hai loại lỗi đó theo tên.) Tên điều kiện không nhạy cảm với trường hợp.SQLSTATEMã; Ví dụ: đây là tương đương:

tỷ lệ kèo bóng đá 88 Division_by_zero sau đó ...

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

tỷ lệ kèo bóng đá 88 lỗi bị bắt bởiNgoại lệmệnh đề, tỷ lệ kèo bóng đá 88 biến cục bộ củaPL/PGSQLChức năng vẫn còn như tỷ lệ kèo bóng đá 88 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. Ví dụ, hãy xem xét đoạn này:

chèn vào tỷ lệ kèo bóng đá 88 giá trị mytab (firstName, lastName) ('tom', 'jones');

Khi điều tỷ lệ kèo bóng đá 88 đạ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ởiNgoại lệmệnh đề. Giá trị được trả về trongreturnCâu tỷ lệ kèo bóng đá 88nh sẽ là giá trị gia tăng củax, nhưng tỷ lệ kèo bóng đá 88 hiệu ứng củaCập nhậttỷ lệ kèo bóng đá 88nh sẽ được quay lại. TheChènTuy nhiên, tỷ lệ kèo bóng đá 88nh trước khối không được quay lại, do đó, kết quả cuối cùng là cơ sở dữ liệu chứaTom JoneskhôngJoe Jones.

TIP

tỷ lệ kèo bóng đá 88 khối chứangoại lệmệnh đề đắt hơn đáng kể tỷ lệ kèo bóng đá 88 nhập và thoát so với một khối mà không có một. Do đó, không sử dụngngoại lệKhông cần.

Ví dụ 43.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, tỷ lệ kèo bóng đá 88 thích hợp. Khuyến nghị rằng các ứng dụng sử dụngChènvớiVề xung đột do cập nhậtthay vì thực sự sử dụng mẫu này. Ví dụ này chủ yếu phục vụ để minh họa việc sử dụngPL/PGSQLCấu trúc luồng điều tỷ lệ kèo bóng đá 88:

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

Mã hóa này giả địnhđộc đáo_violationLỗi là doChèn, và không phải, nói, tỷ lệ kèo bóng đá 88ChènTrong tỷ lệ kèo bóng đá 88 hàm kích hoạt trên bảng. Nó cũng có thể sai nếu có nhiều hơn tỷ lệ kèo bóng đá 88 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.


43.6.8.1.Có được thông tin về lỗi#

Người xử lý ngoại lệ thường cần xác định lỗi cụ thể xảy ra. Có hai cách để có được thông tin về ngoại lệ hiện tại trongPL/PGSQL: Biến đặc biệt vàNhận chẩn đoán xếp chồngtỷ lệ kèo bóng đá 88nh.

Trong tỷ lệ kèo bóng đá 88 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êu ra (tham khảoBảng A.1Để biết danh sách tỷ lệ kèo bóng đá 88 mã lỗi có thể). Biến đặc biệtsqlerrmchứa thông báo lỗi được liên kết với ngoại lệ. tỷ lệ kèo bóng đá 88 biến này không được xác định bên ngoài bộ xử lý ngoại lệ.

Trong tỷ lệ kèo bóng đá 88 trình xử lý ngoại lệ, người ta cũng có thể truy xuất 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ồngtỷ lệ kèo bóng đá 88nh, có biểu mẫu:

Nhận chẩn đoán xếp chồngbiến= | : =Mục[, ...];

mỗiMụclà tỷ lệ kèo bóng đá 88 từ khóa xác định giá trị trạng thái sẽ được gán cho được chỉ địnhBiến(nên thuộc loại dữ liệu phù hợp để nhận nó). tỷ lệ kèo bóng đá 88 mục trạng thái hiện có được hiển thị trongBảng 43.2.

Bảng 43.2.tỷ lệ kèo bóng đá 88 mục chẩn đoán lỗi

tên loại Mô tả
return_sqlstate Text Mã lỗi SQLSTATE của ngoại lệ
Cột_name Text Tên của cột liên quan đến ngoại lệ
instraint_name Text Tên của ràng buộc liên quan đến ngoại lệ
pg_datatype_name Text Tên của kiểu dữ liệu liên quan đến ngoại lệ
message_text Text Văn bản của thông báo chính của ngoại lệ
Table_Name Text Tên của bảng liên quan đến ngoại lệ
Schema_name Text Tên của lược đồ liên quan đến 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 có
pg_exception_hint Text Văn bản của thông báo gợi ý ngoại lệ, nếu có
pg_exception_context Text dòng văn bản mô tả ngăn xếp cuộc gọi tại thời điểm ngoại lệ (xemPhần 43.6.9)

Nếu ngoại lệ không đặt giá trị cho tỷ lệ kèo bóng đá 88 mục, tỷ lệ kèo bóng đá 88 chuỗi trống sẽ được trả về.

Đây là tỷ lệ kèo bóng đá 88 ví dụ:

Khai báo

43.6.9.Có được thông tin vị trí thực thi#

TheNhận chẩn đoántỷ lệ kèo bóng đá 88nh, được mô tả trước đây trongPhần 43.5.5, Lấy thông tin về trạng thái thực thi hiện tại (trong tỷ lệ kèo bóng đá 88Nhận chẩn đoán xếp chồngtỷ lệ kèo bóng đá 88nh đã thảo luận trên báo cáo thông tin về trạng thái thực thi kể từ lỗi trước đó). Của nópg_contextMục trạng thái hữu ích để xác định vị trí thực thi hiện tại.pg_contextTrả về tỷ lệ kèo bóng đá 88 chuỗi văn bản với dòng văn bản mô tả ngăn xếp cuộc gọi. Dòng đầu tiên đề cập đến chức năng hiện tại và hiện đang thực thiNhận chẩn đoánlệnh. tỷ lệ kèo bóng đá 88 dòng thứ hai và bất kỳ dòng tiếp theo nào cũng đề cập đến tỷ lệ kèo bóng đá 88 chức năng gọi lên thêm ngăn xếp cuộc gọi.

Tạo hoặc thay thế hàm outer_func () trả về số nguyên dưới dạng $$

Nhận Chẩn đoán xếp chồng ... PG_EXception_ContextTrả về cùng loại dấu vết ngăn xếp, nhưng mô tả vị trí mà tại đó tỷ lệ kèo bóng đá 88 lỗi được phát hiện, thay vì vị trí hiện tại.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài liệu.