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 một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

38.6. Cấu trúc điều kèo bóng đá hom nay

cấu trúc điều kèo bóng đá hom nay có lẽ là hữu ích nhất (và quan trọng) một phần củaPL/PGSQL. VớiPL/PGSQLS điều kèo bóng đá hom nay 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ẽ.

38.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ừ một hàm:returnReturn Next.

38.6.1.1.return

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ộ.

kèo bóng đá hom 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 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 kèo bóng đá hom nay đạ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.

38.6.1.2.Return NextTruy vấn trả về

Return NextBiểu thức;
Truy vấn trả vềTruy vấn;

kèo bóng đá hom nay APL/PGSQLHàm được tuyên bố trả lạisetofSomethype, 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 một chuỗiReturn Nexthoặctrở lại Truy vấnCác lệnh, và sau đó là cuối cùng14475_14483Lệ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 Next14623_14733"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 NextTruy vấn trả vềcó thể được kết hợp tự do trong A trong A chức năng hoàn trả một lần, 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ừ 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ếptrở lại tiếp theohoặ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. Một 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 kèo bóng đá hom nay đạt đến đầu 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ỉ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ư một 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 bóng đá hom nay có nhiều tham số đầu ra hoặcsetofSOMEYPEkèo bóng đá hom nay 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.

Đây là một 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
    kèo bóng đá hom 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 kèo bóng đá hom nay;
    TRỞ LẠI;
KẾT THÚC
$ Body $
Ngôn ngữ 'plpgsql';

Chọn * từ getallfoo ();

Lưu ý rằng các chức năng bằng cách sử dụngtrở lại KẾ TIẾPhoặcTruy vấn trả lạiPhải được gọi là nguồn bảng trong mộttừmệnh đề.

Lưu ý:Việc triển khai hiện tại củatrở lại tiếp theotrở lại Truy vấnLưu trữ toàn bộ tập kết quả trước kèo bóng đá hom 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/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 kèo bóng đá hom nay 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 trả lại thiết lập 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_mem18345_18524

38.6.2. Điều kiện

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

38.6.2.1.if-then

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

19740_19749Bá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;

38.6.2.2.if-then-else

nếuBoolean-biểu hiệnsau đócâu lệnhkháccâu lệnhkết thúc if;

if-then-elseBáo cáo 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ụ:

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;

38.6.2.3.if-then-else if

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;

kèo bóng đá hom nay 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 kèo bóng đá hom nay có nhiều lựa chọn thay thế để được kiểm tra. Do đó Mẫu tiếp theo.

38.6.2.4.if-then-elef-else

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

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ố. Về mặt chức năng, 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ụ:

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;

38.6.2.5.if-then-elseif-else

otheriflà bí danh choelsif.

38.6.3. Đơn giản kèo bóng đá hom nay

vớikèo bóng đá hom nay, Thoát, Tiếp tục, trong kèo bóng đá hom naychoCâu lệnh, bạn có thể sắp xếp choPL/PGSQLhàm để kèo bóng đá hom nay lại a loạt lệnh.

38.6.3.1.kèo bóng đá hom nay

[<<nhãn ]
kèo bóng đá hom naycâukèo bóng đá hom nay cuối [ nhãn ];

kèo bóng đá hom 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 bóng đá hom 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átTiếp tụcCâu lệnh trong các kèo bóng đá hom nay lồng nhau để chỉ định kèo bóng đá hom nay nào Tuyên bố nên được áp dụng cho.

38.6.3.2.Thoát

Thoát [ nhãn ] [kèo bóng đá hom nayBoolean-biểu hiện ];

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

nếukèo bóng đá hom nayđược chỉ định, kèo bóng đá hom nay Thoát chỉ xảy ra nếu26130_26150là đú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 các vòng vô điều kiện. kèo bóng đá hom nay được sử dụng vớiBắt đầuBlock,ThoátChuyển kiểm soát sang tiếp theo câu lệnh sau kèo bóng đá hom nay 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 kèo bóng đá hom nay đế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;

38.6.3.3.Tiếp tục

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

nếukèo bóng đá hom nayđược chỉ định, tiếp theo Lặp lại của kèo bóng đá hom 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ục28164_28266

Ví dụ:

Vòng lặp
    - Một số tính toán
    Thoát kèo bóng đá hom nay đếm 100;
    Tiếp tục kèo bóng đá hom nay đếm <50;
    - Một số tính toán để đếm trong [50 .. 100] 
Vòng lặp cuối;

38.6.3.4.trong kèo bóng đá hom nay

[<<nhãn ]
TRONG kèo bóng đá hom nayBoolean-biểu hiệnkèo bóng đá hom nayCâukèo bóng đá hom nay cuối [ nhãn ];

Thetrong kèo bóng đá hom nayCâu lệnh kèo bóng đá hom 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 kèo bóng đá hom nay thân hình.

Ví dụ:

Trong kèo bóng đá hom nay số lượng_owed 0 và gift_cert
    - Một số tính toán ở đây
Kết thúc vòng lặp;

Trong kèo bóng đá hom 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;

38.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 ] kèo bóng đá hom naycâu lệnhkèo bóng đá hom nay cuối [ nhãn ];

Hình thức này củachoTạo một kèo bóng đá hom nay 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 xác định tự động 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 bóng đá hom nay Nhập vòng lặp. Nếubởimệnh đề không được chỉ định, bước kèo bóng đá hom 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 kèo bóng đá hom 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 bóng đá hom nay.

Một số ví dụ về số nguyênchokèo bóng đá hom nay:

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

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

Đối với tôi ngược 10..1 bằng 2 kèo bóng đá hom nay
    - Tôi sẽ đảm nhận các giá trị 10,8,6,4,2 trong kèo bóng đá hom nay
kèo bóng đá hom 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ể kèo bóng đá hom 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 Thechokèo bóng đá hom nay sau đó kèo bóng đá hom 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.

38.6.4. kèo bóng đá hom nay qua truy vấn Kết quả

Sử dụng một loại khácchokèo bóng đá hom nay, 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 ]
VÌTargetin32510_32517kèo bóng đá hom nayCâukèo bóng đá hom nay cuối [ nhãn ];

TheTargetlà một 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 bóng đá hom nay được thực hiện 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 kèo bóng đá hom 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 kèo bóng đá hom 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 kèo bóng đá hom 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 kèo bóng đá hom nay.

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 MộtTrở vềmệnh đề. Một số tiện ích Các lệnh nhưGiải thíchSẽ hoạt động cũng vậy.

PL/PGSQL34436_34570Phần 38.10.1Phần 38.10.2.

Thefor-in-ExecuteCâu lệnh là Một cách khác để kèo bóng đá hom nay lại trên các hàng:

[<<nhãn ]
VÌTargettrong thực thitext_expressionkèo bóng đá hom naycâukèo bóng đá hom nay 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àochokèo bóng đá hom 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 thicâu lệnh.

38.6.5. Bẫy Lỗi

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ệ
    kèo bóng đá hom nayđiều kiện[hoặcđiều kiện...] Sau đóHandler_statements[kèo bóng đá hom nayđiều kiện[hoặcđiều kiện...] Sau đóHandler_statements...]
KẾT THÚC;

36991_37060câ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 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ệ37856_37948Ngoạ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ị trongsoi kèo 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ẫy38461_38477BY 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ó.

kèo bóng đá hom 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 bóng đá hom 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 bóng đá hom nay 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 kèo bóng đá hom nay đạ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 quay 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ể). Thesqlerrm40916_41051

Ví dụ 38-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, kèo bóng đá hom 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 bóng đá hom 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');