Cấu trúc điều kèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày mai, bạn có thể thao tácPostgreSQLDữ liệu theo cách rất linh hoạt và mạnh mẽ.
Có hai lệnh có sẵn cho phép bạn trả về dữ liệu từ kèo bóng đá hôm nay và ngày mai hàm:return
vàtrở lại tiếp theo
.
return
#returnBiểu thức
;
return
với biểu thức chấm dứt hàm và trả về giá trị củaBiểu thức
cho người gọi. Mẫu này được sử dụng choPL/PGSQLCác chức năng không trả về kèo bóng đá hôm nay và ngày mai bộ.
Trong kèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày mai biểu thức phân phối chính xác bộ cột được yêu cầu. Điều này có thể yêu cầu sử dụng đúc rõ ràng.
Nếu bạn khai báo chức năng với kèo bóng đá hôm nay và ngày mai tham số đầu ra, hãy viết chỉreturn
Không có biểu thức. kèo bóng đá hôm nay và ngày mai giá trị hiện tại của kèo bóng đá hôm nay và ngày mai biến tham số đầu ra sẽ được trả về.
Nếu bạn tuyên bố chức năng trả vềvoid
, Areturn
Câu lệnh có thể được sử dụng để thoát 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 phần cuối của khối cấp cao nhất của hàm mà không nhấn Areturn
Câ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 á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ềvoid
Tuy nhiên. Trong những trường hợp đóreturn
Câu lệnh được tự động thực hiện nếu khối cấp cao nhất kết thúc.
kèo bóng đá hôm nay và ngày mai số ví dụ:
15165_15375
Return Next
vàTruy vấn trả về
#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
16237_16241, ...]];
kèo bóng đá hôm nay và ngày mai APL/PGSQLHàm được tuyên bố trả lạisetof
, 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ả lại được chỉ định bởi kèo bóng đá hôm nay và ngày mai chuỗiSOMEYPE
Return Next
hoặcTruy vấn trả lại
kèo bóng đá hôm nay và ngày mai lệnh, và sau đó là cuối cùngreturn
Lệnh không có đối số nào được sử dụng để chỉ ra rằng hàm đã hoàn thành thực thi.Return Next
có thể được sử dụng với cả kèo bóng đá hôm nay và ngày mai 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ảngkết quả sẽ được trả về.Truy vấn trả lại
Bổ số kết quả thực hiện truy vấn vào tập kết quả của hàm.Return Next
vàTruy vấn trả về
có thể được xen kẽ tự do trong kèo bóng đá hôm nay và ngày mai hàm hoàn trả lại, trong trường hợp đó kết quả của chúng sẽ được nối.
Return Next
vàTruy vấn trả lại
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 lệnh tiếp theo trongPL/PGSQLHàm. Như liên tiếpReturn Next
hoặcTruy vấn trả về
Các lệnh được thực thi, tậ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ố, khiến kiểm soát thoát khỏi hàm (hoặc bạn chỉ có thể để điều kèo bóng đá hôm nay và ngày mai đạt đến phần cuối của hàm).
Truy vấn trả lại
có biến thểTruy vấn trả về
18127_18258Sử dụng
, theo cách tương tự như trongthực thi
lệnh.
Nếu bạn khai báo chức năng với kèo bóng đá hôm nay và ngày mai tham số đầu ra, hãy viết chỉReturn Next
Khô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ư 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 Record
kèo bóng đá hôm nay và ngày mai có nhiều tham số đầu ra hoặcsetof
18865_18916Somethype
SOMEYPE
, Để tạo chức năng hoàn trả lại với kèo bóng đá hôm nay và ngày mai 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ụngtrở lại tiếp theo
:
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ế chức năng get_all_foo () trả về setof foo AS $ 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ừ get_all_foo ();
Đây là kèo bóng đá hôm nay và ngày mai ví dụ về chức năng sử dụngTruy vấn trả lại
:
19789_20414
Việc triển khai hiện tại củatrở lại tiếp theo
vàTruy vấn trả về
lưu trữ toàn bộ tập kết quả trước kèo bóng đá hôm nay và ngày mai quay lại từ hàm, như đã thảo luận ở trên. Điều đó có nghĩa là nếu mộtPL/PGSQL20755_20993PL/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 kèo bóng đá hôm nay và ngày mai bởiwork_memBiến cấu hình. Quản trị viên có đủ bộ nhớ để lưu trữ kèo bóng đá hôm nay và ngày mai bộ kết quả lớn hơn trong bộ nhớ nên xem xét tăng tham số này.
kèo bóng đá hôm nay và ngày mai thủ tục không có giá trị trả về. Do đó, kèo bóng đá hôm nay và ngày mai thủ tục có thể kết thúc mà không córeturn
Tuyên bố. Nếu bạn muốn sử dụngreturn
Câu lệnh để thoát mã sớm, chỉ viếtreturn
không có biểu thức.
Nếu thủ tục có tham số đầu ra, kèo bóng đá hôm nay và ngày mai giá trị cuối cùng của kèo bóng đá hôm nay và ngày mai biến tham số đầu ra sẽ được trả lại cho trình gọi.
APL/PGSQLchức năng, thủ tục hoặcdo
khối có thể gọi kèo bóng đá hôm nay và ngày mai thủ tục bằng cách sử dụngGọi
. kèo bóng đá hôm nay và ngày mai tham số đầu ra được xử lý khác với cáchGọi
hoạt động trong SQL đơn giản. Mỗiout
hoặcInout
Tham số của thủ tục phải tương ứng với kèo bóng đá hôm nay và ngày mai biến trongGọi
Câ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 kèo bóng đá hôm nay và ngày mai nó trả về. Ví dụ:
Tạo quy trình Triple (Inout X Int) Ngôn ngữ plpgsql Như $$ BẮT ĐẦU x: = x * 3; KẾT THÚC; $$; Làm $$ Tuyên bố myvar int: = 5; BẮT ĐẦU Gọi Triple (Myvar); Nâng cao thông báo 'myvar = %', myvar; - In 15 KẾT THÚC; $$;
Biến tương ứng với tham số đầu ra có thể là kèo bóng đá hôm nay và ngày mai biến đơn giản hoặc kèo bóng đá hôm nay và ngày mai trường của biến loại tổng hợp. Hiện tại, nó không thể là kèo bóng đá hôm nay và ngày mai yếu tố của kèo bóng đá hôm nay và ngày mai mảng.
nếu
vàcase
kèo bóng đá hôm nay và ngày mai câu lệnh cho phép bạn thực thi kèo bóng đá hôm nay và ngày mai lệnh thay thế dựa trên kèo bóng đá hôm nay và ngày mai đ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ạng củacase
:
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 ... trường hợp kết thúc
if-then
#nếuBoolean-biểu hiện
sau đóCâu
kết thúc if;
if-then
Câu lệnh là dạng đơn giản nhất củanếu
. kèo bóng đá hôm nay và ngày mai câu giữasau đó
vàkết thúc nếu
sẽ đượ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 đó Cập nhật người dùng đặt email = v_email trong đó user_id = v_user_id; Kết thúc nếu;
if-then-else
#nếuBoolean-biểu hiện
sau đóCâu
khácCâu
kết thúc if;
if-then-else
Báo cáo thêm vàoif-then
Bằ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á là 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 sau đó Chèn vào kèo bóng đá hôm nay và ngày mai giá trị user_count (đếm) (v_count); Trả lại 't'; KHÁC Trả lại 'f'; Kết thúc nếu;
IF-THEN-ELEF
#nếuBoolean-biểu hiện
sau đócâu
[elsifBoolean-biểu hiện
sau đóCâu
[elsif27827_27847
sau đóCâu
...]] [kháccâu lệnh
] 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-elel
Cung cấp kèo bóng đá hôm nay và ngày mai phương pháp thuận tiện để 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ế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 kèo bóng đá hôm nay và ngày mai 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ác
28710_28740
Đâ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óaelsif
cũng có thể được đánh vầnotherif
.
kèo bóng đá hôm nay và ngày mai cách khác để hoàn thành cùng kèo bóng đá hôm nay và ngày mai nhiệm vụ là làm tổif-then-else
29287_29330
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ếu
cho mỗinếu
, vì vậy nó cồng kềnh hơn nhiều so với sử dụngelsif
kèo bóng đá hôm nay và ngày mai có nhiều lựa chọn thay thế.
case
#casebiểu hiện tìm kiếm
kèo bóng đá hôm nay và ngày maiBiểu thức
[,Biểu thức
[...]] Sau đóCâu
[kèo bóng đá hôm nay và ngày maiBiểu thức
[,Biểu thức
[...]] Sau đócâu lệnh
...] [kháccâu lệnh
] Trường hợp kết thúc;
Hình thức đơn giản củacase
Cung cấp thực thi có điều kiện dựa trên sự bình đẳng của kèo bóng đá hôm nay và ngày mai toán hạng. Thebiểu hiện tìm kiếm
đượ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ỗiBiểu thức
trongkèo bóng đá hôm nay và ngày mai
mệ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âu
được thực thi và sau đó điều kèo bóng đá hôm nay và ngày mai truyề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 mai
Biểu thức không được đánh giá.) Nếu không tìm thấy khớp nào,khác
câu
được thực thi; Nhưng nếukhác
31644_31670case_not_found
Ngoại lệ được 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;
case
#trường hợp kèo bóng đá hôm nay và ngày maiBoolean-biểu hiện
sau đócâu
[kèo bóng đá hôm nay và ngày maiBoolean-biểu hiện
sau đóCâu
...] [kháccâu
] Trường hợp kết thúc;
hình thức tìm kiếm củacase
Cung cấp thực thi có điều kiện dựa trên sự thật của kèo bóng đá hôm nay và ngày mai biểu thức Boolean. Mỗikèo bóng đá hôm nay và ngày mai
mệnh đềBoolean-biểu hiện
được đánh giá lần lượt, 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 thi và sau đó điều kèo bóng đá hôm nay và ngày mai 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 mai
Biể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ác
không có mặt, sau đó Acase_not_found
Ngoại lệ được 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ủacase
hoàn toàn tương đương vớiif-then-elel
, Ngoại trừ quy tắc đạt được sự bỏ quakhác
Mệnh đề dẫn đến lỗi thay vì không làm gì cả.
vớivòng lặp
, Thoát
, Tiếp tục
, trong kèo bóng đá hôm nay và ngày mai
, cho
vàforeach
Câu lệnh, bạn có thể sắp xếp choPL/PGSQLhàm để lặp lại kèo bóng đá hôm nay và ngày mai loạt các lệnh.
Vòng lặp
#[<<nhãn
] Vòng lặpCâu
vòng lặp cuối [nhãn
];
vòng lặp
Xá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 kèo bóng đá hôm nay và ngày mai bị chấm dứt bởi mộtThoát
hoặcreturn
Tuyên bố. Tùy chọnnhãn
có thể được sử dụng bởiThoát
vàTiếp tục
kèo bóng đá hôm nay và ngày mai câu trong kèo bóng đá hôm nay và ngày mai vòng lặp lồng nhau để chỉ định vòng lặp nào kèo bóng đá hôm nay và ngày mai câu lệnh đó đề cập đến.
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, vòng lặp trong cùng được chấm dứt và câu lệnh sauvòng lặp
được thực hiện tiếp theo. Nếu nhưnhãn
được đưa ra, nó phải là nhãn của mức hiện tại hoặc một số mức 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 kèo bóng đá hôm nay và ngày mai 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ếukèo bóng đá hôm nay và ngày mai
được chỉ định, thoát vòng chỉ xảy ra nếuBoolean-biểu hiện
là đúng. Nếu không, kiểm soát chuyển sang câu lệnh sauThoát
.
Thoát
có thể được sử dụng với tất cả kèo bóng đá hôm nay và ngày mai loại vòng lặp; nó không giới hạn sử dụng với kèo bóng đá hôm nay và ngày mai vòng vô điều kiện.
kèo bóng đá hôm nay và ngày mai được sử dụng vớibắt đầu
khối,Thoát
Chuyển điều kèo bóng đá hôm nay và ngày mai sang 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; một không nhãnThoát
Không bao giờ được coi là phù hợp với ABắt đầu
khối. (Đây là kèo bóng đá hôm nay và ngày mai sự thay đổi từ các bản phát hành trước 8.4 củaPOSTGRESQL, sẽ cho phép không nhãnThoát
Để phù hợp với ABắt đầu
khối.)
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 bóng đá hôm nay và ngày mai đếm 0; - Kết quả tương tự như ví dụ trước Kết thúc vòng lặp; << Boblock BẮT ĐẦU - Một số tính toán Nếu cổ phiếu 100000 thì Thoát khỏi bao gồm; - Nguyên nhân thoát khỏi khối bắt đầu Kết thúc nếu; - Tính toán ở đây sẽ bị bỏ qua kèo bóng đá hôm nay và ngày mai cổ phiếu 100000 KẾT THÚC;
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, 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 kèo bóng đá hôm nay và ngày mai trả về biểu thức điều kèo bóng đá hôm nay và ngày mai 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. Nếu nhưnhãn
Có mặt, nó chỉ định nhãn của vòng lặp mà thực thi sẽ được tiếp tục.
nếukèo bóng đá hôm nay và ngày mai
đượ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ện
là đúng. Nếu không, kiểm soát chuyển sang câu lệnh sauTiếp tục
.
Tiếp tục
có thể được sử dụng với tất cả kèo bóng đá hôm nay và ngày mai loại vòng lặp; nó không giới hạn sử dụng với kèo bóng đá hôm nay và ngày mai vòng vô điều kiện.
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;
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ện
vòng lặpCâu
40840_40853nhãn
];
Thetrong kèo bóng đá hôm nay và ngày mai
Câu lệnh lặp lại kèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày mai số lượng_owed 0 và gift_certicate_balance 0 vòng lặp - 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;
cho
(biến thể số nguyên)#[<<nhãn
] VÌtên
trong [đảo ngược]Biểu thức
..Biểu thức
[bởiBiểu thức
] vòng lặpcâu
vòng kết thúc [nhãn
];
Hình thức này củacho
Tạo kèo bóng đá hôm nay và ngày mai vòng lặp lặp qua kèo bóng đá hôm nay và ngày mai loạt các giá trị số nguyên. Biếntên
được định nghĩa tự động là loạiSố nguyên
và 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 kèo bóng đá hôm nay và ngày mai vào vòng lặp. Nếubởi
mệnh đề không được chỉ định Bước lặp là 1, nếu không thì đó là giá trị được chỉ định trongbởi
mệnh đề, 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 được trừ, thay vì thêm, sau mỗi lần lặp.
kèo bóng đá hôm nay và ngày mai số ví dụ về số nguyêncho
vòng lặp:
43252_43568
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ược
43691_43758
Nếu Anhãn
được gắn vàocho
Vòng lặp sau đó biến vòng số nguyê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
.
Sử dụng kèo bóng đá hôm nay và ngày mai loại kháccho
Vò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ác dữ liệu đó phù hợp. Cú pháp là:
[<<nhãn
] VÌTarget
inTruy vấn
vòng lặpCâu
vòng lặp cuối [nhãn
];
TheTarget
là biến bản ghi, biến hàng hoặc danh sách kèo bóng đá hôm nay và ngày mai 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ấn
45177_45243
45278_46251
Nếu vòng lặp bị chấm dứt bởiThoát
Câu lệnh, 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àycho
Câu lệnh có thể là bất kỳ lệnh SQL nào trả về hàng cho người gọi:Chọn
là trường hợp phổ biến nhất, nhưng bạn cũng có thể sử dụngChèn
, Cập nhật
, Xóa
hoặcMerge
với ATrở về
mệnh đề. kèo bóng đá hôm nay và ngày mai số lệnh tiện ích nhưGiải thích
cũng sẽ hoạt động.
PL/PGSQLBiến được thay thế bằng kèo bóng đá hôm nay và ngày mai 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 41.11.1vàPhần 41.11.2.
Thefor-in-Execute
Câ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ÌTarget
trong thực thiText_Expression
[Sử dụngBiểu thức
[, ...]] vòng lặpcâu
vò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àocho
48243_48381thực thi
Tuyên bố. Như vớithực thi
, giá trị tham số có thể được chèn vào lệnh động thông quasử dụng
.
kèo bóng đá hôm nay và ngày mai cách khác để chỉ định truy vấn có kết quả nên được lặp lại là tuyên bố đó là con trỏ. Điều này được mô tả trongPhần 41.7.4.
Theforeach
Vòng lặp giống nhưcho
Vòng lặp, nhưng thay vì lặp 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 lại thông qua các phần tử của giá trị mảng. (Nói chung,foreach
có nghĩa là để lặp qua kèo bóng đá hôm nay và ngày mai thành phần của biểu thức có giá trị tổng hợp; kèo bóng đá hôm nay và ngày mai biến thể để lặp qua vật liệu tổng hợp bên cạnh kèo bóng đá hôm nay và ngày mai mảng có thể được thêm vào trong tương lai.)foreach
Câu lệnh để 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ức
vòng lặpcâu lệnh
vòng lặp cuối [nhãn
];
không cóSlice
hoặc nếuSlice 0
được chỉ định, vòng lặp lặp qua kèo bóng đá hôm nay và ngày mai phần tử riêng lẻ của mảng được tạo ra bằng cách đánh giáBiểu thức
. TheTarget
Biế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à kèo bóng đá hôm nay và ngày mai ví dụ về việc lặp qua các phần tử của 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 lặp s: = s + x; Kết thúc vòng lặp; Trả lại s; KẾT THÚC; $$ ngôn ngữ plpgsql;
kèo bóng đá hôm nay và ngày mai 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ùTarget
thườ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 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ựcSlice
Giá trị,foreach
lặp lại thông qua kèo bóng đá hôm nay và ngày mai lát của mảng thay vì kèo bóng đá hôm nay và ngày mai phần tử đơn. TheSlice
Giá 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. TheTarget
Biế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
. Dưới đâ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 lặp Nâng cao thông báo 'hàng = %', x; Kết thúc vòng lặp; 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
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 đầu
khố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 đầu
khối:
[<<Nhãn
] [khai báoKhai báo
] BẮT ĐẦUCâu
Ngoạ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;
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 kèo bóng đá hôm nay và ngày mai 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âu
bị bỏ rơi và điều kèo bóng đá hôm nay và ngày mai truyền choNgoại lệ
Danh sách. Danh sách được tìm kiếm cho đầu tiênđiều kiện
Kết hợp lỗi 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 đó điều kèo bóng đá hôm nay và ngày mai 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 kèo bóng đá hôm nay và ngày mai 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ện
54908_54946Phụ lục A. 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ác
khớp với mọi loại lỗi ngoại trừquery_canceled
vàAssert_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. Ngoài ra, kèo bóng đá hôm nay và ngày mai điều kiện lỗi có thể được chỉ định bởiSQLSTATE
Mã; 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
, nó không thể bị bắt bởi điều nàyNgoại lệ
mệnh đề, nhưng được truyền ra. kèo bóng đá hôm nay và ngày mai xung quanh55896_55907
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 đề, kèo bóng đá hôm nay và ngày mai biến cục bộ củaPL/PGSQLChức năng vẫn còn như 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. Ví dụ, hãy xem xét đoạn này:
56301_56582
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_zero
Lỗi. Điều này sẽ bị bắt bởiNgoại lệ
mệnh đề. Giá trị được trả về trongreturn
Câu lệnh sẽ là giá trị gia tăng củax
, nhưng kèo bóng đá hôm nay và ngày mai hiệu ứng củaCập nhật
Lệnh sẽ được quay lại. TheChèn
Lệnh trước khối không được quay lại, tuy nhiên, kết quả cuối cùng là cơ sở dữ liệu chứaTom Jones
khôngJoe Jones
.
kèo bóng đá hôm nay và ngày mai khối chứaNgoại lệ
mệnh đề đắt hơn đáng kể kèo bóng đá hôm nay và ngày mai 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.
57658_57700Cập nhật
/Chèn
Ví dụ này sử dụng xử lý ngoại lệ để thực hiệnCập nhật
hoặcChèn
, kèo bóng đá hôm nay và ngày mai thích hợp. Khuyến nghị rằng các ứng dụng sử dụng58040_58048
vớitrên xung đột do cập nhật
thay 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 kèo bóng đá hôm nay và ngày mai:
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ả định59101_59119
Lỗi là doChèn
, và không phải bởi, nói, kèo bóng đá hôm nay và ngày maiChèn
59240_59549
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: kèo bóng đá hôm nay và ngày mai biến đặc biệt vàNhận chẩn đoán xếp chồng
lệnh.
Trong kèo bóng đá hôm nay và ngày mai trình xử lý ngoại lệ, biến đặc biệtSQLSTATE
Chứ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 kèo bóng đá hôm nay và ngày mai mã lỗi có thể). Biến đặc biệtsqlerrm
chứa thông báo lỗi được liên kết với ngoại lệ. kèo bóng đá hôm nay và ngày mai biến này không được xác định bên ngoài bộ xử lý ngoại lệ.
Trong kèo bóng đá hôm nay và ngày mai 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ồng
Lệnh có biểu mẫu:
Nhận chẩn đoán xếp chồngbiến
= | : =Mục
[, ...];
mỗiMục
là kèo bóng đá hôm nay và ngày mai từ khóa xác định giá trị trạng thái được gán cho được chỉ định61313_61323
(nên thuộc loại dữ liệu phù hợp để nhận nó). kèo bóng đá hôm nay và ngày mai mục trạng thái hiện có được hiển thị trongBảng 41.2.
Bảng 41.2. kèo bóng đá hôm nay và ngày mai 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ệ |
urdaint_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 41.6.9) |
Nếu ngoại lệ không đặt giá trị cho kèo bóng đá hôm nay và ngày mai mục, kèo bóng đá hôm nay và ngày mai chuỗi trống sẽ được trả về.
Đây là kèo bóng đá hôm nay và ngày mai ví dụ:
Khai báo Text_var1 văn bản; Text_var2 văn bản; Text_Var3 văn bản; BẮT ĐẦU - Một số xử lý có thể gây ra một ngoại lệ ... Ngoại lệ kèo bóng đá hôm nay và ngày mai những người khác sau đó Nhận Chẩn đoán xếp chồng Text_Var1 = message_text, text_var2 = pg_exception_detail, text_var3 = pg_exception_hint; KẾT THÚC;
TheNhận chẩn đoán
Lệnh, được mô tả trước đây trongPhần 41.5.5, Lấy thông tin về trạng thái thực thi hiện tại (trong kèo bóng đá hôm nay và ngày maiNhận chẩn đoán xếp chồng
Lệnh đã 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_context
Mục trạng thái rất hữu ích để xác định vị trí thực thi hiện tại.pg_context
Trả về kèo bóng đá hôm nay và ngày mai 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án
lệnh. kèo bóng đá hôm nay và ngày mai dòng thứ hai và bất kỳ dòng tiếp theo nào cũng đề cập đến kèo bóng đá hôm nay và ngày mai chức năng gọi lên thêm ngăn xếp cuộc gọi. Ví dụ:
66611_67207
Nhận Chẩn đoán xếp chồng ... PG_EXception_Context
Trả về cùng kèo bóng đá hôm nay và ngày mai loại dấu vết ngăn xếp, nhưng mô tả vị trí mà tại đó kèo bóng đá hôm nay và ngày mai lỗi được phát hiện, thay vì vị trí hiện tại.
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ớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.