Postgresql 8.4.22 Tài liệu | ||||
---|---|---|---|---|
Prev | Backward nhanh | Chương 38.PL/PGSQL - SQLNgôn ngữ thủ tục | Chuyển tiếp nhanh | NEXT |
kèo chấp bóng đá hôm nay có lẽ là hữu ích nhất (và quan trọng) một phần củaPL/PGSQL. VớiPL/PGSQL11243_11289PostgreSQLDữ liệu trong rất linh hoạt và cách mạnh mẽ.
Có hai lệnh có sẵn cho phép bạn quay lại Dữ liệu từ kèo chấp bóng đá hôm nay hàm:returnvàReturn Next.
returnBiểu thức;
returnvới kèo chấp bóng đá hôm nay 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 cho12193_12203Các chức năng không trả về kèo chấp bóng đá hôm nay bộ.
kèo chấp bóng đá hôm nay trả lại loại vô hướng, bất kỳ biểu thức nào cũng có thể được sử dụng. Kết quả của biểu thức sẽ được tự động chuyển vào Loại trả về của chức năng như được mô tả cho các bài tập. ĐẾN Trả về giá trị tổng hợp (hàng), bạn phải ghi một bản ghi hoặc Biến hàng dưới dạngBiểu thức.
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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nayển đạt đến cuối khối cấp cao nhất của chức năng mà không nhấnreturn13268_13421voidTuy nhiên. Trong những trường hợp đó kèo chấp bóng đá hôm nayreturnCâu lệnh được tự động được thực hiện nếu khối cấp cao kết thúc.
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[, ...]];
kèo chấp bóng đá hôm nay APL/PGSQL14271_14311setofSOMEYPE, 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 chấp bóng đá hôm nay 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 NextvàTruy vấn trả vềcó thể được kết hợp tự do trong A trong A chức năng hoàn trả kèo chấp bóng đá hôm nay lần, trong trường hợp đó kết quả của chúng sẽ được nối.
Return NextvàTruy 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 vào 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ặc15747_15761Các lệnh là Thực hiện, tập hợp kết quả được xây dựng. kèo chấp bóng đá hôm nay cuối cùngreturn, không có đối số, gây ra Kiểm soát để thoát chức năng (hoặc bạn chỉ có thể cho phép điều kèo chấp bóng đá hôm nayển đạt đến đầu của hàm).
Truy vấn trả vềcó 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 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ỉtrở lại tiếp theoKhô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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay có nhiều tham số đầu ra hoặcsetofSOMEYPEkèo chấp bóng đá hôm nay chỉ có một tham số đầu ra của loạianypepe, để tạo ra kèo chấp bóng đá hôm nay chức năng đặt lại với tham số đầu ra.
Đây là kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay - Có thể thực hiện một 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 kèo chấp bóng đá hôm nay; 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ủaReturn Nextvàtrở lại Truy vấnLưu trữ toàn bộ tập kết quả trước kèo chấp bóng đá hôm nay trả về từ chức năng, như đã thảo luận ở trên. Điều đó có nghĩa là nếu MộtPL/PGSQL18088_18376PL/PGSQLcó thể cho phép người dùng xác định các chức năng trả lại thiết lập mà 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.
nếuvàcaseCâ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 chấp bóng đá hôm nay ... sau đó ... khác ... Trường hợp kết thúc
trường hợp kèo chấp bóng đá hôm nay ... sau đó ... khác ... kết thúc TRƯỜNG HỢP
nếuBoolean-biểu hiệnsau đóTuyên bốkết thúc if;
if-thenCâu lệnh là Hình thức đơn giản nhất củanếu. Các tuyên bố giữasau đóvà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;
nếuBoolean-biểu hiệnsau đóCâukhá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 kèo chấp bóng đá hôm nay 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 Sau đó Chèn vào 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;
nếuBoolean-biểu hiệnsau đócâu lệnh[elsif22070_22090sau đócâu[elsifBoolean-biểu hiệnsau đóCâu...]] [khácCâu ] Kết thúc nếu;
Đôi kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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ónếuĐiều kiện là đúng, sau đókháckhối (nếu có) được thực thi.
Đây là kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay cách thay thế để hoàn thành cùng kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay có nhiều lựa chọn thay thế.
casebiểu hiện tìm kiếmkèo chấp bóng đá hôm nayexpression[, Biểu thức[...]] Sau đócâu[kèo chấp bóng đá hôm nayexpression[, 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 chấp bóng đá hôm nay lần) và liên tiếp so với mỗiBiểu thứctrongkèo chấp bóng đá hôm naymệnh đề. Nếu kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nayBiể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à kèo chấp bóng đá hôm nay ví dụ đơn giản:
trường hợp x kèo chấp bóng đá hôm nay 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;
trường hợp kèo chấp bóng đá hôm nayBoolean-biểu hiệnsau đócâu26429_26435kèo chấp bóng đá hôm nayBoolean-biểu hiệnsau đócâu...] [khácCâu ] 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ỗikèo chấp bóng đá hôm naymệnh đềBoolean-biểu hiệnIS lần lượt được đánh giá, cho đến kèo chấp bóng đá hôm nay phát hiện ra sản lượngTRUE27031_27058Câ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 theokèo chấp bóng đá hôm nayBiể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 đó làcase_not_foundNgoại lệ là nâng lên.
Đây là kèo chấp bóng đá hôm nay ví dụ:
27643_27829
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 chấp bóng đá hôm nay sự bỏ quakhácĐiều khoản dẫn đến lỗi thay vì Không làm gì cả.
vớivòng kèo chấp bóng đá hôm nay, Thoát, Tiếp tục, trong kèo chấp bóng đá hôm nayvàchoCâu lệnh, bạn có thể sắp xếp choPL/PGSQLhàm để kèo chấp bóng đá hôm nay lại a loạt lệnh.
[<<nhãn ] Vòng kèo chấp bóng đá hôm naycâuvòng kèo chấp bóng đá hôm nay cuối [ nhãn ];
vòng kèo chấp bóng đá hôm nayXác định một điều kiện vô điều kiện Vòng lặp được lặp lại vô thời hạn cho đến kèo chấp bóng đá hôm nay bị chấm dứt bởi mộtThoáthoặcreturnTuyên bố. Tùy chọnnhãncó thể được sử dụng bởiThoátvàTiếp tụcCâu lệnh trong các vòng kèo chấp bóng đá hôm nay lồng nhau để chỉ định vòng kèo chấp bóng đá hôm nay nào Các câu lệnh tham khảo.
Thoát [ nhãn ] [kèo chấp bóng đá hôm nayBoolean-biểu hiện ];
nếu khôngnhãnđược đưa ra, The Vòng kèo chấp bóng đá hôm nay trong cùng được chấm dứt và câu lệnh sauvòng kèo chấp bóng đá hôm nayđượ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 chấp bóng đá hôm nay vòng lặp/khối tương ứngkết thúc.
nếukèo chấp bóng đá hôm nayđược chỉ định, vòng kèo chấp bóng đá hôm nay Thoát chỉ xảy ra nếuBoolean-biểu hiện30572_30639Thoá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 chấp bóng đá hôm nay.
kèo chấp bóng đá hôm nay đượ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 chấp bóng đá hôm nay 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à khớp vớibắt đầukhối. (Đây là kèo chấp bóng đá hôm nay 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ụ:
Vòng lặp - Một số tính toán Nếu đếm 0 thì RA; - Vòng lặp thoát Kết thúc nếu; Kết thúc vòng lặp; Vòng lặp - Một số tính toán Thoát kèo chấp bóng đá hôm nay đếm 0; - Kết quả tương tự như ví dụ trước Kết thúc vòng lặp; << 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 chấp bóng đá hôm nay cổ phiếu 100000 KẾT THÚC;
Tiếp tục [ nhãn ] [kèo chấp bóng đá hôm nayBoolean-biểu hiện ];
nếu khôngnhãn32360_32636NhãnCó mặt, nó Chỉ định nhãn của vòng kèo chấp bóng đá hôm nay mà thực thi sẽ tiếp tục.
nếukèo chấp bóng đá hôm nayđược chỉ định, tiếp theo kèo chấp bóng đá hôm nay lại của vòng kèo chấp bóng đá hôm nay 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ục33092_33194
Ví dụ:
Vòng lặp - Một số tính toán Thoát kèo chấp bóng đá hôm nay đếm 100; Tiếp tục kèo chấp bóng đá hôm nay đếm <50; - Một số tính toán để đếm trong [50 .. 100] Vòng lặp cuối;
[<<nhãn ] TRONG kèo chấp bóng đá hôm nayBoolean-biểu hiệnvòng kèo chấp bóng đá hôm naycâuvòng kèo chấp bóng đá hôm nay cuối [ nhãn 33916_33921
Thetrong kèo chấp bóng đá hôm nayCâu lệnh kèo chấp bóng đá hôm nay lại a trình tự các câu lệnh miễn là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 chấp bóng đá hôm nay thân hình.
Ví dụ:
Trong kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay không hoàn thành vòng lặp - Một số tính toán ở đây Vòng lặp cuối;
[<<34715_34722 ] VÌtêntrong [đảo ngược]Biểu thức..Biểu thức[bởi34978_34990 ] Vòng kèo chấp bóng đá hôm naycâu lệnhvòng kèo chấp bóng đá hôm nay cuối [ nhãn ];
Hình thức này củachoTạo một vòng kèo chấp bóng đá hôm nay Rằng kèo chấp bóng đá hôm nay đi kèo chấp bóng đá hôm nay lại trên một loạt các giá trị số nguyên. Biếntênđược tự động xác định dưới dạng loạiSố nguyênvà chỉ tồn tại bên trong Vòng lặp (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 kèo chấp bóng đá hôm nay Nhập vòng lặp. Nếubởimệnh đề không được chỉ định, bước kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay. 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 chấp bóng đá hôm nay.
kèo chấp bóng đá hôm nay số ví dụ về số nguyênchovòng kèo chấp bóng đá hôm nay:
cho tôi trong 1..10 vòng kèo chấp bóng đá hôm nay - 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 chấp bóng đá hôm nay Kết thúc vòng kèo chấp bóng đá hôm nay; Đối với tôi trong đảo ngược 10..1 vòng kèo chấp bóng đá hôm nay - 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 chấp bóng đá hôm nay trong vòng kèo chấp bóng đá hôm nay Kết thúc vòng kèo chấp bóng đá hôm nay; Đối với tôi ngược 10..1 bằng 2 vòng kèo chấp bóng đá hôm nay - Tôi sẽ đảm nhận các giá trị 10,8,6,4,2 trong vòng kèo chấp bóng đá hôm nay Vòng kèo chấp bóng đá hôm nay cuối;
Nếu giới hạn dưới lớn hơn giới hạn trên (hoặc ít hơn, trongđảo ngượctrường hợp), The Cơ thể vòng kèo chấp bóng đá hôm nay hoàn toàn không được thực hiện. Không có lỗi được nêu ra.
Nếu Anhãnđược đính kèm ThechoVòng kèo chấp bóng đá hôm nay sau đó vòng kèo chấp bóng đá hôm nay 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.
Sử dụng kèo chấp bóng đá hôm nay loại khácchoVòng kèo chấp bóng đá hôm nay, bạn có thể kèo chấp bóng đá hôm nay lại thông qua kết quả của một truy vấn và thao túng dữ liệu đó cho phù hợp. Cú pháp là:
[<<nhãn ] VÌTargetinTruy vấnvòng kèo chấp bóng đá hôm naycâuvòng kèo chấp bóng đá hôm nay cuối [ nhãn ];
TheTargetlà kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay được thực thi cho mỗi hàng. Đây là một ví dụ:
Tạo hàm CS_REFRESH_MVIEWS () Trả về số nguyên dưới dạng $$ TUYÊN BỐ Bản ghi MViews; BẮT ĐẦU Thực hiện cs_log ('làm mới các chế độ xem cụ thể hóa ...'); Đối với các mview trong select * từ cs_materialized_views đặt hàng theo vòng kèo chấp bóng đá hôm nay sort_key - Bây giờ "mview" có một bản ghi từ cs_m vật liệu hóa_views Thực hiện CS_LOG ('Chế độ xem được vật chất hóa làm mới' || quote_ident (mviews.mv_name) | Thực thi 'Bảng cắt ngắn' || quote_ident (mviews.mv_name); Thực thi 'chèn vào' | | QUOTE_IDENT (mviews.mv_name) || '' || mviews.mv_query; Kết thúc vòng kèo chấp bóng đá hôm nay; Thực hiện cs_log ('thực hiện các chế độ xem vật chất làm mới.'); Trả lại 1; KẾT THÚC; $$ ngôn ngữ plpgsql;
Nếu vòng kèo chấp bóng đá hôm nay bị chấm dứt bởiThoátcâu lệnh, giá trị hàng được gán cuối cùng là vẫn có thể truy cập sau vòng kèo chấp bóng đá hôm nay.
TheTruy vấnĐược sử dụng trong loại này củacho38906_38979Chọ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 chấp bóng đá hôm nayTrở vềmệnh đề. kèo chấp bóng đá hôm nay 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 trong bộ nhớ cache để sử dụng lại có thể, như đã thảo luận chi tiết trongPhần 38.10.1vàPhần 38.10.2.
Thefor-in-ExecuteCâu lệnh là Một cách khác để kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nayCâuvòng kèo chấp bóng đá hôm nay 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 vàochoVòng kèo chấp bóng đá hôm nay. Điều này cho phép lập trình viên chọn tốc độ của một truy vấn được định sẵn hoặc tính linh hoạt của một truy vấn động, giống như với một đơn giảnthực 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ả kèo chấp bóng đá hôm nay đi kèo chấp bóng đá hôm nay lại là tuyên bố nó là một con trỏ. Đây là được mô tả trongPhần 38.7.4.
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à 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ệ41569_41638bắt đầukhối:
[<<nhãn ] [khai báoKhai báo ] BẮT ĐẦUcâuNgoại lệ kèo chấp bóng đá hôm nayđiều kiện[hoặcđiều kiện...] Sau đóHandler_statements[kèo chấp bóng đá hôm nayđ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 kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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ị trongkèo chấp bóng đá hôm nay đá. kèo chấp bóng đá hôm nay 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, kèo chấp bóng đá hôm nay lỗi Điều kiện có thể được chỉ định bởiSQLSTATEMã; Ví dụ: đây là tương đương:
kèo chấp bóng đá hôm nay Division_by_zero sau đó ... kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay xung quanh44460_44471mệnh đề có thể bắt được nó.
kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay Division_by_zero sau đó Nâng cao thông báo 'Caught Division_by_zero'; Trả lại x; KẾT THÚC;
kèo chấp bóng đá hôm nay điều kèo chấp bóng đá hôm nayển đạ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. The45695_45703Tuy 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:kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay khối mà không có kèo chấp bóng đá hôm nay. Do đó, không sử dụngNgoại lệKhông cần.
Trong kèo chấp bóng đá hôm nay trình xử lý ngoại lệ,SQLSTATE46342_46442Bảng A-1cho a Danh sách các mã lỗi có thể có). TheSQLERRMBiến chứ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.
Ví dụ 38-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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay độc đáo_violation sau đó - Không làm gì cả và lặp lại để thử lại bản cập nhật 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');