Postgresql 8.1.23 Tài liệu | ||||
---|---|---|---|---|
Prev | Backward nhanh | Chương 36.PL/PGSQL - SQLNgôn ngữ thủ tục | Chuyển tiếp nhanh | NEXT |
cấu trúc điều tỷ lệ kèo bóng đá 88 có lẽ là hữu ích nhất (và quan trọng) một phần củaPL/PGSQL. VớiPL/PGSQLS điều tỷ lệ kèo bóng đá 88 cấu trúc, bạn có thể thao tácPostgreSQLDữ liệu trong rất linh hoạt và cách mạnh mẽ.
Có hai lệnh có sẵn cho phép bạn quay lại Dữ liệu từ một hàm:returnvàReturn Next.
returnBiểu thức;
returnvới một 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/PGSQLCác chức năng không trả về một bộ.
tỷ lệ kèo bóng đá 88 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 một 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 cuối khối cấp cao nhất của chức năng mà không nhấnreturnCâu lệnh, một 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 đó MộtreturnCâ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;
tỷ lệ kèo bóng đá 88 APL/PGSQLHàm được tuyên bố trả lạisetofanypepe, 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 trongReturn NextCác lệnh, và sau đó là cuối cùngreturnlệnh không có đối số nào được sử dụng để chỉ ra rằng chức năng đã hoàn thành thực thi.trở lại KẾ TIẾPcó thể được sử dụng với cả dữ liệu vô hướng và tổng hợp loại; với loại kết quả tổng hợp, toàn bộ"Bảng"kết quả sẽ được trả về.
Return Next14600_14772PL/PGSQLHàm. Như liên tiếpReturn NextCác lệnh được thực thi, tập kết quả được xây dựng. Một cuối cùngreturn, mà không có đối số, khiến kiểm soát thoát khỏi chức năng (hoặc bạn có thể Chỉ cần để điều tỷ lệ kèo bóng đá 88 đạt đến phần cuối của hàm).
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. Các giá trị hiện tại của (các) biến tham số đầu ra sẽ được lưu để trả lại cuối cùng. Lưu ý rằng bạn phải khai báo chức năng trở lạiSetof Record15462_15517setofSOMEYPEtỷ lệ kèo bóng đá 88 chỉ có một tham số đầu ra của loạiSOMEYPE, để tạo một chức năng đặt lại với tham số đầu ra.
Các chức năng sử dụngReturn Nextnên được gọi theo kiểu sau:
Chọn * từ some_func ();
nghĩa là, hàm phải được sử dụng làm nguồn bảng trong Atừmệnh đề.
Lưu ý:Việc triển khai hiện tại củaReturn NextchoPL/PGSQLlưu trữ toàn bộ kết quả đặt trước tỷ lệ kèo bóng đá 88 trở về từ chức năng, như đã thảo luận bên trên. Điều đó có nghĩa là nếu mộtPL/PGSQLchức năng tạo ra rất tập hợp kết quả lớn, hiệu suất có thể kém: dữ liệu sẽ là được viết vào đĩa để tránh cạn kiệt bộ nhớ, nhưng Bản thân chức năng sẽ không trở lại cho đến tỷ lệ kèo bóng đá 88 toàn bộ kết quả Bộ đã đượ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 viết Đĩ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ữ 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ếuCâu lệnh cho phép bạn thực thi các lệnh dựa trên các điều kiện nhất định.PL/PGSQLCó năm dạngnếu:
nếu ... thì
Nếu ... thì ... khác
Nếu ... thì ... khác nếu
Nếu ... thì ... elsif ... sau đó ... KHÁC
Nếu ... thì ... otherif ... sau đó ... KHÁC
nếuBoolean-biểu hiệnsau đóCâukết thúc if;
if-thenCâu nói 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ụ:
18799_18903
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 một tập hợp các câu lệnh thay thế nên được thực thi nếu Điều kiện đánh giá là sai.
Ví dụ:
19562_19699
19738_19864
nếuCâu nói có thể được lồng, vì 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;
tỷ lệ kèo bóng đá 88 bạn sử dụng biểu mẫu này, bạn thực sự đang làm tổnếucâu lệnh bên trongkhácmột phần của bên ngoàinếuTuyên bố. Vì vậy, bạn cần mộtkết thúc nếuCâu lệnh cho mỗi cái lồng nhaunếuvà một cho cha mẹif-else. Điều này là khả thi nhưng phát triển tẻ nhạt tỷ lệ kèo bóng đá 88 có nhiều lựa chọn thay thế để được kiểm tra. Do đó Mẫu tiếp theo.
nếuBoolean-biểu hiệnsau đócâu lệnh[elsifBoolean-biểu hiệnsau đóCâu[elsifBoolean-biểu hiệnsau đócâu...]] [khácCâu 21506_21518
if-then-elef-elsecung cấp a Phương pháp thuận tiện hơn để kiểm tra nhiều lựa chọn thay thế trong một tuyên bố. Chính thức nó tương đương với lồng nhauif-then-else-if-thenlệnh, nhưng chỉ mộtkết thúc nếulà cần thiết.
Đây là một ví dụ:
21904_22148
otheriflà bí danh choelsif.
vớitỷ lệ kèo bóng đá 88 lặp, Thoát, Tiếp tục, trong tỷ lệ kèo bóng đá 88vàchoCâu lệnh, bạn có thể sắp xếp cho của mìnhPL/PGSQLhàm để tỷ lệ kèo bóng đá 88 lại a loạt lệnh.
[<<nhãn ] tỷ lệ kèo bóng đá 88 lặpcâu lệnhtỷ lệ kèo bóng đá 88 lặp cuối [ nhãn ];
tỷ lệ kèo bóng đá 88 lặpXác định vô điều kiện Vòng lặp đượ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átvàTiếp tụcCâu trong các tỷ lệ kèo bóng đá 88 lặp lồng nhau để chỉ định tỷ lệ kèo bóng đá 88 lặp nào Tuyên bố nên được áp dụng cho.
Thoát [ nhãn ] [tỷ lệ kèo bóng đá 88Biểu thức ];
nếu khôngnhãnđược đưa ra, The tỷ lệ kèo bóng đá 88 lặp trong cùng được chấm dứt và câu lệnh sauKết thúc tỷ lệ kèo bóng đá 88đượ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 tỷ lệ kèo bóng đá 88 vòng lặp/khối tương ứngkết thúc.
nếutỷ lệ kèo bóng đá 88được chỉ định, tỷ lệ kèo bóng đá 88 lặp Thoát chỉ xảy ra nếuBiểu thứclà đúng. Nếu không, 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 các vòng vô điều kiện. tỷ lệ kèo bóng đá 88 được sử dụng vớibắt đầuBlock,ThoátChuyển kiểm soát sang tiếp theo câu lệnh sau tỷ lệ kèo bóng đá 88 kết thúc 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 tỷ lệ kèo bóng đá 88 đếm 0; - Kết quả tương tự như ví dụ trước Kết thúc vòng lặp; BẮT ĐẦU - Một số tính toán Nếu cổ phiếu 100000 thì RA; - Nguyên nhân thoát khỏi khối bắt đầu Kết thúc nếu; KẾT THÚC;
Tiếp tục [ nhãn ] [tỷ lệ kèo bóng đá 88Biểu thức ];
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à, Kiểm soát được chuyển trở lại biểu thức điều tỷ lệ kèo bóng đá 88 vòng lặp (nếu bất kỳ), và cơ thể của vòng lặp được đánh giá lại. Nếu nhưnhãncó mặt, nó chỉ định Nhãn của tỷ lệ kèo bóng đá 88 lặp mà thực thi sẽ được tiếp tục.
nếutỷ lệ kèo bóng đá 88được chỉ định, tiếp theo Lặp lại của tỷ lệ kèo bóng đá 88 lặp chỉ được bắt đầu nếuBiểu thức26633_26700Tiếp tục.
Tiếp tụccó thể được sử dụng với tất cả các loại tỷ lệ kèo bóng đá 88 lặp; nó không giới hạn sử dụng với vô điều kiện tỷ lệ kèo bóng đá 88 lặp.
ví dụ:
Vòng lặp - Một số tính toán Thoát tỷ lệ kèo bóng đá 88 đếm 100; Tiếp tục tỷ lệ kèo bóng đá 88 đếm <50; - Một số tính toán để đếm trong [50 .. 100] Vòng lặp cuối;
[<<nhãn ] TRONG tỷ lệ kèo bóng đá 88Biểu thứctỷ lệ kèo bóng đá 88 lặpcâu lệnhtỷ lệ kèo bóng đá 88 lặp cuối [ nhãn ];
Thetrong tỷ lệ kèo bóng đá 88Câu lệnh lặp lại a trình tự các câu lệnh miễn là biểu thức điều kiện đánh giá đúng. Điều kiện được kiểm tra ngay trước mỗi nhập vào cơ thể tỷ lệ kèo bóng đá 88 lặp.
Ví dụ:
27906_28090
[<<nhãn ] VÌtêntrong [đảo ngược]Biểu thức..Biểu thứctỷ lệ kèo bóng đá 88 lặpcâutỷ lệ kèo bóng đá 88 lặp cuối [ nhãn ];
Hình thức này củachoTạo một tỷ lệ kèo bóng đá 88 lặp Rằng lặp đi lặp 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. Hai biểu thức cho phần dưới và trên Giới hạ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ước lặp thường là 1, nhưng là -1 tỷ lệ kèo bóng đá 88đảo ngượcđược chỉ định.
Một số ví dụ về số nguyênchotỷ lệ kèo bóng đá 88 lặp:
cho tôi trong 1..10 tỷ lệ kèo bóng đá 88 lặp - Một số tính toán ở đây Nâng cao thông báo 'Tôi là %', tôi; Kết thúc tỷ lệ kèo bóng đá 88 lặp; Đối với tôi trong đảo ngược 10..1 tỷ lệ kèo bóng đá 88 lặp - Một số tính toán ở đây tỷ lệ kèo bóng đá 88 lặp 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ể tỷ lệ kèo bóng đá 88 lặp hoàn toàn không được thực hiện. Không có lỗi được nêu ra.
Sử dụng một loại khácchotỷ lệ kèo bóng đá 88 lặp, bạn có thể lặp 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 30171_30179Record_or_rowinTruy vấntỷ lệ kèo bóng đá 88 lặpCâutỷ lệ kèo bóng đá 88 lặp cuối [ nhãn ];
Biến bản ghi hoặc hàng được gán liên tiếp cho mỗi hàng kết quả từTruy vấn(mà Phải làChọnlệnh) và tỷ lệ kèo bóng đá 88 lặp Cơ thể được thực hiện cho mỗi hàng. Đây là một ví dụ:
30703_31366
Nếu tỷ lệ kèo bóng đá 88 lặp 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 tỷ lệ kèo bóng đá 88 lặp.
Thefor-in-ExecuteCâu lệnh là Một cách khác để tỷ lệ kèo bóng đá 88 lại trên các hàng:
[<<nhãn ] VÌRecord_or_rowtrong thực thi31842_3185931862_31875câu lệnhKết thúc tỷ lệ kèo bóng đá 88 [ nhãn ];
Đây giống như biểu mẫu trước đó, ngoại trừ nguồnChọncâu lệnh được chỉ định là A Biểu thức chuỗi, được đánh giá và trả lời trên mỗi nhập vàochotỷ lệ kèo bóng đá 88 lặp. Đ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 thicâu lệnh.
Lưu ý:ThePL/PGSQLhiện tại trình phân tích cú pháp phân biệt hai loạichotỷ lệ kèo bóng đá 88 lặp (số nguyên hoặc kết quả truy vấn) bằng cách kiểm tra xem..xuất hiện bên ngoài bất kỳ dấu ngoặc đơn nào giữainvàtỷ lệ kèo bóng đá 88 lặp. Nếu như..không Nhìn thấy sau đó tỷ lệ kèo bóng đá 88 lặp được coi là một tỷ lệ kèo bóng đá 88 trên các hàng. Sai lầm..do đó có khả năng dẫn đến một tỷ lệ kèo bóng đá 88ếu nại dọc theo các dòng"Biến tỷ lệ kèo bóng đá 88 lặp của tỷ lệ kèo bóng đá 88 trên các hàng phải là một bản ghi hoặc biến hàng ", thay vì cú pháp đơn giản Lỗi người ta có thể mong đợi nhận được.
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 sử dụngbắt đầukhối vớingoại lệmệnh đề. Cú pháp là một phần mở rộng của Cú pháp bình thường cho mộtBắt đầukhối:
[<<nhãn ] [khai báoKhai báo ] BẮT ĐẦUCâuNgoại lệ tỷ lệ kèo bóng đá 88đ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...] 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âu lệnhbị bỏ rơi, và kiểm soát truyền choNgoại lệDanh sách. Danh sách được tìm kiếm cho đầu tiênđiều kiệnkhớp với lỗi đó xảy ra. Nếu tìm thấy một 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 một cái kèm theo chặn vớiNgoại lệ35676_35741
35752_35758điều kiệnTên có thể Bất kỳ trong số đó được hiển thị trongkèo tỷ số bóng đá. Một 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.
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. Một 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 đề, các biến cục bộ củaPL/PGSQLHàm vẫn còn như chúng là 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. BẰNG Một ví dụ, xem xét đoạn này:
36904_37225
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ở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:một 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 một khối mà không có một. Do đó, không sử dụngNgoại lệKhông cần.
Trong một 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ể). 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ụ 36-1. 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.
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 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; 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ệ tỷ lệ kèo bóng đá 88 độc đáo_violation sau đó - Không làm gì cả 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');