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

40.6. kèo bóng đá việt nam

kèo bóng đá việt nam có lẽ là phần hữu ích nhất (và quan trọng) củaPL/PGSQL. VớiPL/PGSQL11098_11142PostgreSQLDữ liệu theo cách rất linh hoạt và mạnh mẽ.

40.6.1. Trở về từ kèo bóng đá việt nam hàm

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

40.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ề kèo bóng đá việt nam bộ.

Trong kèo bóng đá việt nam 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 đá việt nam 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 đá việt nam tham số đầu ra, hãy viết chỉreturn12426_12519

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 kèo bóng đá việt nam 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 đá việt namển đạ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, kèo bóng đá việt nam 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 lệnh được tự động thực hiện nếu khối cấp cao kết thúc.

kèo bóng đá việt nam số ví dụ:

- Các chức năng trả về loại vô hướng
Trả lại 1 + 2;
Trả lại vô hướng_var;

- Các chức năng trả về kèo bóng đá việt nam loại tổng hợp
Trả về composite_type_var;
Trả lại (1, 2, 'ba' :: văn bản);  - Phải đúc các cột để sửa các loại

40.6.1.2.Return NextTruy 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ệnh13856_13860Sử dụngBiểu thức[, ...]];

kèo bóng đá việt nam APL/PGSQLHàm được tuyên bố trả lạisetofSOMEYPE, 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 đá việt nam chuỗiReturn NexthoặcTruy vấn trả vềkèo bóng đá việt nam lệnh, và sau đó là cuối cùngreturnLệnh 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ả kèo bóng đá việt nam 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ảng"củ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 vào tập kết quả của hàm.Return NextTruy vấn trả vềcó thể được xen kẽ tự do trong kèo bóng đá việt nam hàm 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ự quay 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ếp15322_15335hoặ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 đá việt nam cuối cùngreturn, không có đối số, kèo bóng đá việt namến kiểm soát thoát khỏi hàm (hoặc bạn có thể chỉ để điều kèo bóng đá việt namển đạ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 thilệnh.

Nếu bạn khai báo chức năng với kèo bóng đá việt nam 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ư kèo bóng đá việt nam 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 đá việt nam có nhiều tham số đầu ra hoặcsetofSOMEYPEkèo bóng đá việt nam 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 kèo bóng đá việt nam tham số đầu ra.

Đây là kèo bóng đá việt nam 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ế 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 đá việt nam 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 đá việt nam ví dụ về chức năng sử dụngTruy vấn trả về:

17285_17907

Lưu ý:Việc triển khai hiện tại củaReturn NextTruy vấn trả lạiLưu trữ toàn bộ tập kết quả trước kèo bóng đá việt nam quay lại 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 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 cạn kiệt bộ nhớ, nhưng chính chức năng sẽ không quay lại cho đến kèo bóng đá việt nam 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 kèo bóng đá việt namển bởiwork_memBiến cấu hình. Quản trị viên có đủ bộ nhớ để lưu trữ kèo bóng đá việt nam bộ kết quả lớn hơn trong bộ nhớ nên xem xét tăng tham số này.

40.6.2. Điều kiện

nếucasekèo bóng đá việt nam câu lệnh cho phép bạn thực thi kèo bóng đá việt nam lệnh thay thế dựa trên kèo bóng đá việt nam đ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 hình thứccase:

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

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

40.6.2.1.if-then

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

if-thenCâu nói là hình thức đơn giản nhất củanếu. kèo bóng đá việt nam 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 đó
    Cập nhật người dùng đặt email = v_email trong đó user_id = v_user_id;
Kết thúc nếu;

40.6.2.2.if-then-else

nếuBoolean-biểu hiệnsau đócâu lệnhkhá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 bóng đá việt nam 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ụ:

21104_21239
Nếu V_Count 0 Sau đó
    Chèn vào kèo bóng đá việt nam giá trị user_count (đếm) (v_count);
    Trả lại 't';
KHÁC
    Trả lại 'f';
Kết thúc nếu;

40.6.2.3.if-then-elel

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

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

Nếu số = 0 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ể được đánh vầnotherif.

kèo bóng đá việt nam cách khác để hoàn thành cùng kèo bóng đá việt nam nhiệm vụ là làm 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 bóng đá việt nam 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 bóng đá việt nam có nhiều lựa chọn thay thế.

40.6.2.4. Đơn giảncase

casebiểu hiện tìm kiếmkèo bóng đá việt namBiểu thức[, Biểu thức[...]] sau đócâu lệnh[kèo bóng đá việt namBiểu thức[, 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 kèo bóng đá việt nam toán hạng. Thebiểu hiện tìm kiếmđược đánh giá (kèo bóng đá việt nam lần) và liên tiếp so với mỗiexpressiontrongkèo bóng đá việt nammệnh đề. Nếu kèo bóng đá việt nam 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 đá việt namển chuyển sang câu lệnh tiếp theo sauCase End. (Tiếp theokèo bóng đá việt namBiể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áckhông có mặt, sau đó Acase_not_foundNgoại lệ được nâng lên.

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

trường hợp x
    kèo bóng đá việt nam 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;

40.6.2.5. Đã tìm kiếmcase

trường hợp
    kèo bóng đá việt namBoolean-biểu hiệnsau đóCâu[kèo bóng đá việt namBoolean-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 kèo bóng đá việt nam biểu thức Boolean. Mỗikèo bóng đá việt nammệnh đềBoolean-biểu hiệnđược đánh giá lần lượt, cho đến kèo bóng đá việt nam tìm thấy sản lượngTRUE. Sau đó tương ứngCâuđược thực thi và sau đó điều kèo bóng đá việt namển truyền sang câu lệnh tiếp theo sautrường hợp kết thúc. (Tiếp theokèo bóng đá việt namBiể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à kèo bóng đá việt nam ví dụ:

trường hợp
    kèo bóng đá việt nam x từ 0 đến 10 thì
        MSG: = 'Giá trị nằm trong khoảng từ 0 đến mười';
    kèo bóng đá việt nam 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ủacase27081_27110IF-THEN-ELEF, 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ả.

40.6.3. kèo bóng đá việt nam vòng lặp đơn giản

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

40.6.3.1.vòng lặp

[<<Nhãn ]
Vòng lặpCâ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 kèo bóng đá việt nam bị chấm dứt bởi mộtThoáthoặcreturnTuyên bố. Tùy chọn28378_28385có thể được sử dụng bởiThoátTiếp tụckèo bóng đá việt nam câu trong kèo bóng đá việt nam vòng lặp lồng nhau để chỉ định kèo bóng đá việt nam câu lệnh nào được đề cập đến.

40.6.3.2.Thoát

Thoát [ nhãn ] [kèo bóng đá việt namBoolean-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ãn29089_29306kết thúc.

nếukèo bóng đá việt namđượ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 lệnh sauThoát.

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

kèo bóng đá việt nam được sử dụng vớibắt đầuBlock,ThoátChuyển điều kèo bóng đá việt namển sang câu lệnh tiếp theo sau kèo bóng đá việt nam 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átKhông bao giờ được coi là phù hợp vớiBắt đầukhối. (Đây là kèo bóng đá việt nam 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 đầukhối.)

Ví dụ:

30248_30685

40.6.3.3.Tiếp tục

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

nếu khôngnhãn31066_31312nhã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ếukèo bóng đá việt namđượ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 lệnh sauTiếp tục.

Tiếp tụccó thể được sử dụng với tất cả kèo bóng đá việt nam loại vòng lặp; nó không giới hạn sử dụng với kèo bóng đá việt nam 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 đá việt nam đếm 100;
    Tiếp tục kèo bóng đá việt nam đếm <50;
    - Một số tính toán để đếm trong [50 .. 100]
Vòng lặp cuối;

40.6.3.4.trong kèo bóng đá việt nam

[<<nhãn ]
TRONG kèo bóng đá việt namBoolean-biểu hiệnvòng lặpCâuvòng lặp cuối [ nhãn ];

Thetrong kèo bóng đá việt namCâu lệnh lặp lại kèo bóng đá việt nam 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 đá việt nam số lượng_owed 0 và gift_certificate_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 đá việt nam không hoàn thành vòng lặp
    - Một số tính toán ở đây
Vòng lặp cuối;

40.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 ] vòng lặpCâuvòng lặp cuối [ Nhãn ];

Hình thức này củachoTạo kèo bóng đá việt nam vòng lặp lặp qua kèo bóng đá việt nam loạt các giá trị số nguyên. Biếntênđược định nghĩa tự động là loạiSố nguyên33793_34019bở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 đề, kèo bóng đá việt nam lần nữa được đánh giá kèo bóng đá việt nam 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 đá việt nam số ví dụ về số nguyênchovòng lặp:

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

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

Đối với tôi ngược 10..1 bằng 2 vòng lặp
    - Tôi sẽ đảm nhận kèo bóng đá việt nam giá trị 10,8,6,4,2 trong vòng lặp
Vòng lặp cuối;

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 kèo bóng đá việt nam tên đủ điều kiện, sử dụng đónhãn.

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

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

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

TheTargetlà kèo bóng đá việt nam biến bản ghi, biến hàng hoặc danh sách các 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à kèo bóng đá việt nam ví dụ:

Tạo chức năng Refresh_Mviews () Trả về Số nguyên dưới dạng $$  
TUYÊN BỐ
    Bản ghi MViews;
BẮT ĐẦU
    Nâng cao thông báo 'Làm mới tất cả các quan điểm cụ thể hóa ...';
    Đối với MViews trong
       Chọn N.NspName là MV_Schema,
              c.relname dưới dạng mv_name,
              pg_catalog.pg_get_userbyid (c.relowner) làm chủ sở hữu
         Từ pg_catalog.pg_class c
    Bên trái tham gia pg_catalog.pg_namespace n ON (n.oid = c.Relnamespace)
        Trong đó C.Relkind = 'M'
     Đặt hàng theo 1
    Vòng lặp

        - Bây giờ "MViews" có kèo bóng đá việt nam bản ghi với thông tin về chế độ xem được vật chất hóa

        Nâng cao thông báo 'Chế độ xem được vật chất hóa được làm mới %. %(Chủ sở hữu: %) ...',
                     quote_ident (mviews.mv_schema),
                     quote_ident (mviews.mv_name),
                     QUOTE_IDENT (MVIEWS.OWNER);
        Thực thi 'Chế độ xem làm mới được vật chất' | | QUOTE_IDENT (mviews.mv_schema)
                      || '.' || quote_ident (mviews.mv_name);
    Kết thúc vòng lặp;

    Nâng cao thông báo 'Thực hiện làm mới các quan điểm cụ thể hóa.';
    Trả lại 1;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Nếu vòng lặp bị chấm dứt bởiThoát37275_37352

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

PL/PGSQLBiến được thay thế thành văn bản 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 40.10.1Phần 40.10.2.

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

38279_38282<<nhãn ]
VÌTargettrong thực thiText_Expression[Sử dụngexpression[, ...]] 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àocho38914_39052thực thiCâu lệnh. 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 đá việt nam 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 40.7.4.

40.6.5. Vòng lặp qua kèo bóng đá việt nam mảng

TheforeachVòng lặp giống như39665_39670Vòng lặp, nhưng thay vì lặp qua các hàng được trả về bởi kèo bóng đá việt nam 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 kèo bóng đá việt nam thành phần của biểu thức có giá trị tổng hợp; kèo bóng đá việt nam biến thể để lặp qua vật liệu tổng hợp bên cạnh kèo bóng đá việt nam mảng có thể được thêm vào trong tương lai.)foreachCâu lệnh để lặp qua kèo bóng đá việt nam mảng là:

[<<Nhãn ]
ForeachTarget[SliceSố ] trong mảngBiểu thứcvòng lặpcâu lệnhKết thúc vòng [ nhãn ];

không cóSlicehoặc nếuSlice 0được chỉ định, vòng lặp lặp qua kèo bóng đá việt nam phần tử riêng lẻ của mảng được tạo bằng cách đánh giáBiểu thức. 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à kèo bóng đá việt nam 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 $$
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 đá việt nam 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 kèo bóng đá việt nam 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 kèo bóng đá việt nam lát của mảng thay vì kèo bóng đá việt nam 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à kèo bóng đá việt nam 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 đá việt nam ví dụ về việc lặp lại thông qua các lát kèo bóng đá việt nam chiều:

Tạo chức năng 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

40.6.6. Bẫy lỗi

Theo mặc định, mọi lỗi xảy ra trong APL/PGSQL42713_42863Bắt đầukhối vớingoại lệmệnh đề. Cú pháp là kèo bóng đá việt nam phần mở rộng của cú pháp bình thường cho kèo bóng đá việt nambắt đầukhối:

[<<nhãn ]
[khai báoKhai báo ]
BẮT ĐẦUCâuNgoại lệ
    kèo bóng đá việt namđiều kiện[hoặcđiều kiện...] sau đóHandler_statements[kèo bóng đá việt namđ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, sau đó điều kèo bóng đá việt namển 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 kèo bóng đá việt namển 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 kèo bóng đá việt nam trận đấu, tương ứngHandler_statementsđược thực thi và sau đó điều kèo bóng đá việt namển truyề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 đá việt nam 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. kèo bóng đá việt nam 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. (Có thể, nhưng thường không khôn ngoan, để bẫyquery_canceledtheo 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 đá việt nam điều kiện lỗi có thể được chỉ định bởiSQLSTATE45285_45327

kèo bóng đá việt nam Division_by_zero sau đó ...
kèo bóng đá việt nam 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 đá việt nam xung quanhNgoại lệmệnh đề có thể bắt được nó.

kèo bóng đá việt nam lỗi bị bắt bởiNgoại lệmệnh đề, kèo bóng đá việt nam biến cục bộ củaPL/PGSQLChức năng vẫn còn như kèo bóng đá việt nam 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 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 đá việt nam Division_by_zero sau đó
        Nâng cao thông báo 'Caught Division_by_zero';
        Trả lại x;
KẾT THÚC;

46329_46370Y, 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 lệnh sẽ là giá trị gia tăng củax, nhưng kèo bóng đá việt nam hiệu ứng củaCập nhậtLệnh sẽ được quay lại. TheChènTuy nhiên, lệnh 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:kèo bóng đá việt nam khối chứa47075_47086mệnh đề đắt hơn đáng kể kèo bóng đá việt nam 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ụ 40-2. Ngoại lệ vớiCập nhật/Chèn

47466_47523Cập nhật47552_47558Chèn, kèo bóng đá việt nam 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 đá việt nam độ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ả địnhđộc đáo_violationLỗi là doChèn, và không phải, nói, kèo bóng đá việt namChènTrong kèo bóng đá việt nam hàm kích hoạt trên bảng. Nó cũng có thể sai nếu có nhiều hơn kèo bóng đá việt nam 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. Có thể có nhiều sự an toàn hơn bằng cách sử dụng các tính năng được thảo luận tiếp theo để kiểm tra xem lỗi bị mắc kẹt có phải là dự kiến ​​không.

40.6.6.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: kèo bóng đá việt nam biến đặc biệt vàNhận chẩn đoán xếp chồnglệnh.

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

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

mỗiMụclà kèo bóng đá việt nam 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ó). kèo bóng đá việt nam mục trạng thái hiện có được hiển thị trongBảng 40-2.

Bảng 40-2. kèo bóng đá việt nam mục chẩn đoán lỗi

tên loại Mô tả
50835_50854 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ệ
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 51926_51932 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 40.6.7)

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

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

52603_52930

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

TheNhận chẩn đoánLệnh, được mô tả trước đây trongPhần 40.5.5, Lấy thông tin về trạng thái thực thi hiện tại (trong kèo bóng đá việt namNhận chẩn đoán xếp chồngLệ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_contextMục trạng thái rất hữu ích để xác định vị trí thực thi hiện tại.pg_contextTrả về kèo bóng đá việt nam 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. kèo bóng đá việt nam dòng thứ hai và bất kỳ dòng tiếp theo nào cũng đề cập đến kèo bóng đá việt nam chức năng gọi lên thêm ngăn xếp cuộc gọi. Ví dụ:

Tạo hoặc thay thế hàm outer_func () trả về số nguyên dưới dạng $$
BẮT ĐẦU
  Return inner_func ();
KẾT THÚC;
$$ Ngôn ngữ plpgsql;

Tạo hoặc thay thế hàm inter_func () trả về số nguyên dưới dạng $$
TUYÊN BỐ
  Ngăn xếp văn bản;
BẮT ĐẦU
  Nhận Chẩn đoán STACK = PG_CONTEXT;
  Nâng cao thông báo e '--- Gọi ngăn xếp --- \ n%', ngăn xếp;
  Trả lại 1;
KẾT THÚC;
$$ Ngôn ngữ plpgsql;

Chọn outer_func ();

Thông báo: --- Gọi ngăn xếp ---
Chức năng PL/PGSQL bên trong_func () dòng 5 tại GET Chẩn đoán
Chức năng PL/PGSQL OUTER_FUNC () Dòng 3 kèo bóng đá việt nam trả về
Bối cảnh: Hàm PL/PGSQL Outer_func () Line 3 kèo bóng đá việt nam trả về
 OUTER_FUNC
 ------------
           1
(1 hàng)

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