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

41.6. Cấu trúc điều cách đọc kèo bóng đá#

Cấu trúc điều cách đọc kèo bóng đá có lẽ là phần hữu ích nhất (và quan trọng) của​​PL/PGSQL. VớiPL/PGSQLCác cấu trúc điều cách đọc kèo bóng đá, bạn có thể thao tácPostgreSQLDữ liệu theo cách đọc kèo bóng đá rất linh hoạt và mạnh mẽ.

41.6.1. Trở về từ cách đọc kèo bóng đá hàm#

Có hai lệnh có sẵn cho phép bạn trả về dữ liệu từ cách đọc kèo bóng đá hàm:returntrở lại tiếp theo.

41.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ề cách đọc kèo bóng đá bộ.

Trong cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá tham số đầu ra, hãy viết chỉreturnKhông có biểu thức. cách đọc kèo bóng đá giá trị hiện tại của cách đọc kèo bóng đá biến tham số đầu ra sẽ được trả về.

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 cách đọc kèo bóng đá biểu thức saureturn.

Giá trị trả về của hàm không thể được xác định. Nếu điều cách đọc kèo bóng đá đạ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, cách đọc kèo bóng đá 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 nhất kết thúc.

cách đọc kèo bóng đá số ví dụ:

15165_15375

41.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ệnh[sử dụngBiểu thức16237_16241, ...]];

cách đọc kèo bóng đá 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 cách đọc kèo bóng đá chuỗiReturn NexthoặcTruy vấn trả lạicách đọc kèo bóng đá 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 hàm đã hoàn thành thực thi.Return Nextcó thể được sử dụng với cả cách đọc kèo bóng đá 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ạiBổ 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 cách đọc kèo bóng đá 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ả lạiKhô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 NexthoặcTruy vấn trả vềCác lệnh được thực thi, tập kết quả được xây dựng. cách đọc kèo bóng đá 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 cách đọc kèo bóng đá đạt đến phần cuối của hàm).

Truy vấn trả lạicó biến thểTruy vấn trả về18127_18258Sử dụng, theo cách đọc kèo bóng đá tương tự như trongthực thilệnh.

Nếu bạn khai báo chức năng với cách đọc kèo bóng đá 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ư cách đọc kèo bóng đá 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 Recordcách đọc kèo bóng đá có nhiều tham số đầu ra hoặcsetofSomethype18865_18916SOMEYPE, Để tạo chức năng hoàn trả lại với cách đọc kèo bóng đá tham số đầu ra.

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

19789_20414

Lưu ý

Việc triển khai hiện tại củatrở lại tiếp theoTruy vấn trả vềlưu trữ toàn bộ tập kết quả trước cách đọc kèo bóng đá 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 cách đọc kèo bóng đá bởiwork_memBiến cấu hình. Quản trị viên có đủ bộ nhớ để lưu trữ cách đọc kèo bóng đá bộ kết quả lớn hơn trong bộ nhớ nên xem xét tăng tham số này.

41.6.2. Trở về từ cách đọc kèo bóng đá thủ tục#

cách đọc kèo bóng đá thủ tục không có giá trị trả về. Do đó, cách đọc kèo bóng đá thủ tục có thể kết thúc mà không córeturnTuyên bố. Nếu bạn muốn sử dụngreturnCâu lệnh để thoát mã sớm, chỉ viếtreturnkhông có biểu thức.

Nếu thủ tục có tham số đầu ra, cách đọc kèo bóng đá giá trị cuối cùng của cách đọc kèo bóng đá biến tham số đầu ra sẽ được trả lại cho trình gọi.

41.6.3. Gọi cách đọc kèo bóng đá thủ tục#

APL/PGSQLchức năng, thủ tục hoặcdokhối có thể gọi cách đọc kèo bóng đá thủ tục bằng cách sử dụngGọi. cách đọc kèo bóng đá tham số đầu ra được xử lý khác với cáchGọihoạt động trong SQL đơn giản. MỗiouthoặcInoutTham số của thủ tục phải tương ứng với cách đọc kèo bóng đá biến trongGọiCâ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 cách đọc kèo bóng đá 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à cách đọc kèo bóng đá biến đơn giản hoặc cách đọc kèo bóng đá trường của biến loại tổng hợp. Hiện tại, nó không thể là cách đọc kèo bóng đá yếu tố của cách đọc kèo bóng đá mảng.

41.6.4. Điều kiện#

nếucasecách đọc kèo bóng đá câu lệnh cho phép bạn thực thi cách đọc kèo bóng đá lệnh thay thế dựa trên cách đọc kèo bóng đá đ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 ... cách đọc kèo bóng đá ... sau đó ... khác ... trường hợp kết thúc

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

41.6.4.1.if-then #

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

if-thenCâu lệnh là dạng đơn giản nhất củanếu. cách đọc kèo bóng đá 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;

41.6.4.2.if-then-else #

nếuBoolean-biểu hiệnsau đóCâukhácCâukế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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá giá trị user_count (đếm) (v_count);
    Trả lại 't';
KHÁC
    Trả lại 'f';
Kết thúc nếu;

41.6.4.3.IF-THEN-ELEF #

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

Đôi cách đọc kèo bóng đá có nhiều hơn chỉ hai lựa chọn thay thế.if-then-elelCung cấp cách đọc kèo bóng đá phương pháp thuận tiện để kiểm tra cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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ác28710_28740

Đây là cách đọc kèo bóng đá 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ể được đánh vầnotherif.

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

41.6.4.4. Đơn giảncase #

casebiểu hiện tìm kiếmcách đọc kèo bóng đáBiểu thức[, Biểu thức[...]] Sau đóCâu[cách đọc kèo bóng đáBiể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ủacaseCung cấp thực thi có điều kiện dựa trên sự bình đẳng của cách đọc kèo bóng đá toán hạng. Thebiểu hiện tìm kiếmđược đánh giá (cách đọc kèo bóng đá lần) và liên tiếp so với mỗiBiểu thứctrongcách đọc kèo bóng đámệnh đề. Nếu cách đọc kèo bóng đá trận đấu được tìm thấy, thì tương ứngcâuđược thực thi và sau đó điều cách đọc kèo bóng đá truyền sang câu lệnh tiếp theo sautrường hợp kết thúc. (Tiếp theocách đọc kèo bóng đá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ác31644_31670case_not_foundNgoại lệ được nâng lên.

Đây là cách đọc kèo bóng đá ví dụ đơn giản:

trường hợp x
    cách đọc kèo bóng đá 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;

41.6.4.5. Đã tìm kiếmcase #

trường hợp
    cách đọc kèo bóng đáBoolean-biểu hiệnsau đócâu[cách đọc kèo bóng đáBoolean-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 cách đọc kèo bóng đá biểu thức Boolean. Mỗicách đọc kèo bóng đámệnh đềBoolean-biểu hiệnđược đánh giá lần lượt, cho đến cách đọc kèo bóng đá phát hiện ra sản lượngTRUE. Sau đó tương ứngcâuđược thực thi và sau đó điều cách đọc kèo bóng đá chuyển sang câu lệnh tiếp theo sautrường hợp kết thúc. (Tiếp theocách đọc kèo bóng đá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áckhông có mặt, sau đó Acase_not_foundNgoại lệ được nâng lên.

Đây là cách đọc kèo bóng đá ví dụ:

trường hợp
    cách đọc kèo bóng đá x từ 0 đến 10 thì
        MSG: = 'Giá trị nằm trong khoảng từ 0 đến mười';
    cách đọc kèo bóng đá 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ủacasehoàn toàn tương đương vớiif-then-elel, 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ả.

41.6.5. cách đọc kèo bóng đá vòng lặp đơn giản#

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

41.6.5.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 cách đọc kèo bóng đá 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ách đọc kèo bóng đá câu trong cách đọc kèo bóng đá vòng lặp lồng nhau để chỉ định vòng lặp nào cách đọc kèo bóng đá câu lệnh đó đề cập đến.

41.6.5.2.Thoát #

Thoát [ nhãn ] [cách đọc kèo bóng đáBoolean-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 cách đọc kèo bóng đá 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ếucách đọc kèo bóng đáđượ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ả cách đọc kèo bóng đá loại vòng lặp; nó không giới hạn sử dụng với cách đọc kèo bóng đá vòng vô điều kiện.

cách đọc kèo bóng đá được sử dụng vớibắt đầukhối,ThoátChuyển điều cách đọc kèo bóng đá 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átKhông bao giờ được coi là phù hợp với ABắt đầukhối. (Đây là cách đọc kèo bóng đá 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ụ:

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 cách đọc kèo bóng đá đế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 cách đọc kèo bóng đá cổ phiếu 100000
KẾT THÚC;

41.6.5.3.Tiếp tục #

Tiếp tục [ nhãn ] [cách đọc kèo bóng đáBoolean-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 cách đọc kèo bóng đá trả về biểu thức điều cách đọc kèo bóng đá 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ã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ếucách đọc kèo bóng đáđượ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ả cách đọc kèo bóng đá loại vòng lặp; nó không giới hạn sử dụng với cách đọc kèo bóng đá vòng vô điều kiện.

Ví dụ:

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

41.6.5.4.trong cách đọc kèo bóng đá #

[<<nhãn ]
TRONG cách đọc kèo bóng đáBoolean-biểu hiệnvòng lặpCâu40840_40853 nhãn ];

Thetrong cách đọc kèo bóng đáCâu lệnh lặp lại cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá không hoàn thành vòng lặp
    - Một số tính toán ở đây
Vòng lặp cuối;

41.6.5.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 kết thúc [ nhãn ];

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

cách đọc kèo bóng đá số ví dụ về số nguyênchovò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ược43691_43758

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

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

Sử dụng cách đọc kèo bóng đá loại khácchoVòng lặp, bạn có thể lặp lại thông qua kết quả của cách đọc kèo bóng đá truy vấn và thao tác dữ liệu đó 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à biến bản ghi, biến hàng hoặc danh sách cách đọc kèo bóng đá 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ấn45177_45243

45278_46251

Nếu vòng lặp bị chấm dứt bởiThoátCâ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à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ật, XóahoặcMergevới ATrở vềmệnh đề. cách đọc kèo bóng đá số lệnh tiện ích nhưGiải thíchcũng sẽ hoạt động.

PL/PGSQLBiến được thay thế bằng cách đọc kèo bóng đá 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.1Phần 41.11.2.

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

[<<nhãn ]
VÌTargettrong thực thiText_Expression[Sử dụngBiểu thức[, ...]] 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àocho48243_48381thực thiTuyê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.

cách đọc kèo bóng đá 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.

41.6.7. Vòng lặp qua cách đọc kèo bóng đá mảng#

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

[<<nhãn ]
ForeachTarget[SliceSố ] trong mảngBiểu thứcvòng lặpcâu lệnhvòng lặp cuối [ nhãn ];

không cóSlicehoặc nếuSlice 0được chỉ định, vòng lặp lặp qua cách đọc kèo bóng đá phần tử riêng lẻ của mảng được tạo ra 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à cách đọc kèo bóng đá 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;

cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá lát của mảng thay vì cách đọc kèo bóng đá 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à cách đọc kèo bóng đá 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à cách đọc kèo bóng đá ví dụ về việc lặp lại thông qua các lát cách đọc kèo bóng đá 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

41.6.8. Bẫy lỗi#

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 đọc kèo bóng đá sử dụngbắt đầukhối vớiNgoại lệmệnh đề. Cú pháp là cách đọc kèo bóng đá phần mở rộng của cú pháp bình thường cho cách đọc kèo bóng đábắt đầukhối:

[<<Nhãn ]
[khai báoKhai báo ]
BẮT ĐẦUCâuNgoại lệ
    cách đọc kèo bóng đáđiều kiện[hoặcđiều kiện...] sau đóHandler_statements[cách đọc kèo bóng đáđ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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá trận đấu, tương ứngHandler_statementsđược thực thi và sau đó điều cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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ện54908_54946Phụ lục A. cách đọc kèo bóng đá 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_canceledAssert_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, cách đọc kèo bóng đá điều kiện lỗi có thể được chỉ định bởiSQLSTATEMã; Ví dụ: đây là tương đương:

cách đọc kèo bóng đá Division_by_zero sau đó ...
cách đọc kèo bóng đá 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. cách đọc kèo bóng đá xung quanh55896_55907mệnh đề có thể bắt được nó.

cách đọc kèo bóng đá lỗi bị bắt bởiNgoại lệmệnh đề, cách đọc kèo bóng đá biến cục bộ củaPL/PGSQLChức năng vẫn còn như cách đọc kèo bóng đá 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 cách đọc kèo bóng đá đạ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ở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 cách đọc kèo bóng đá hiệu ứng củaCập nhậtLệnh sẽ được quay lại. TheChènLệ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 JoneskhôngJoe Jones.

TIP

cách đọc kèo bóng đá khối chứaNgoại lệmệnh đề đắt hơn đáng kể cách đọc kèo bóng đá 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ậthoặcChèn, cách đọc kèo bóng đá thích hợp. Khuyến nghị rằng các ứng dụng sử dụng58040_58048vớitrên xung đột do cập nhậtthay 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 cách đọc kèo bóng đá:

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ệ cách đọc kèo bóng đá độ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_59119Lỗi là doChèn, và không phải bởi, nói, cách đọc kèo bóng đáChèn59240_59549


41.6.8.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 kèo bóng đá để có được thông tin về ngoại lệ hiện tại trongPL/PGSQL: cách đọc kèo bóng đá biến đặc biệt vàNhận chẩn đoán xếp chồnglệnh.

Trong cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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ệ. cách đọc kèo bóng đá biến này không được xác định bên ngoài bộ xử lý ngoại lệ.

Trong cách đọc kèo bóng đá 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ồngLệnh có biểu mẫu:

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

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

Bảng 41.2. cách đọc kèo bóng đá 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 cách đọc kèo bóng đá mục, cách đọc kèo bóng đá chuỗi trống sẽ được trả về.

Đây là cách đọc kèo bóng đá 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ệ cách đọc kèo bóng đá 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;

41.6.9. 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 41.5.5, Lấy thông tin về trạng thái thực thi hiện tại (trong cách đọc kèo bóng đáNhậ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ề cách đọc kèo bóng đá 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. cách đọc kèo bóng đá dòng thứ hai và bất kỳ dòng tiếp theo nào cũng đề cập đến cách đọc kèo bóng đá 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_ContextTrả về cùng cách đọc kèo bóng đá loại dấu vết ngăn xếp, nhưng mô tả vị trí mà tại đó cách đọc kèo bóng đá lỗi được phát hiện, thay vì vị trí hiện tại.

Gửi hiệu chỉnh

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.