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

43.7. kèo bóng đá việt nam trỏ#

Thay vì thực hiện toàn bộ truy vấn cùng kèo bóng đá việt nam lúc, có thể thiết lập kèo bóng đá việt namkèo bóng đá việt nam trỏĐóng gói truy vấn, và sau đó đọc kết quả truy vấn kèo bóng đá việt nam vài hàng cùng kèo bóng đá việt nam lúc. kèo bóng đá việt nam lý do để làm điều này là để tránh ghi đè bộ nhớ khi kết quả chứa kèo bóng đá việt nam số lượng lớn các hàng. (Tuy nhiên,PL/PGSQLNgười dùng thường không cần phải lo lắng về điều đó, vìchoLoops tự động sử dụng kèo bóng đá việt nam trỏ bên trong để tránh các vấn đề về bộ nhớ.) Cách sử dụng thú vị hơn là trả về tham chiếu đến kèo bóng đá việt nam trỏ mà hàm đã tạo, cho phép người gọi đọc các hàng. Điều này cung cấp một cách hiệu quả để trả về các bộ hàng lớn từ các chức năng.

43.7.1. Khai báo các biến kèo bóng đá việt nam trỏ#

Tất cả quyền truy cập vào kèo bóng đá việt nam trỏ trongPL/PGSQLĐi qua các biến kèo bóng đá việt nam trỏ, luôn thuộc loại dữ liệu đặc biệtrefcursor. Một cách để tạo biến kèo bóng đá việt nam trỏ chỉ là khai báo nó là một biến của loạiRefcursor. Một cách khác là sử dụng cú pháp khai báo kèo bóng đá việt nam trỏ, nói chung là:

tên12477_12481[12527_12533] cuộn] kèo bóng đá việt nam trỏ [(Đối số)] choTruy vấn;

(chocó thể được thay thế bằngchoOracleKhả năng tương thích.) Nếucuộnđược chỉ định, kèo bóng đá việt nam trỏ sẽ có khả năng cuộn ngược; nếu nhưKhông có cuộnđược chỉ định, tìm nạp ngược sẽ bị từ chối; Nếu không có thông số kỹ thuật nào xuất hiện, nó phụ thuộc vào truy vấn liệu có được phép tìm kiếm ngược không.Đối số, nếu được chỉ định, là danh sách các cặp được phân tách bằng dấu phẩytên DataTypeXác định tên sẽ được thay thế bằng các giá trị tham số trong truy vấn đã cho. Các giá trị thực tế để thay thế cho các tên này sẽ được chỉ định sau, khi kèo bóng đá việt nam trỏ được mở.

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

Khai báo
    Curs1 refcursor;
    kèo bóng đá việt nam trỏ curs2 cho chọn * từ tenk1;
    kèo bóng đá việt nam trỏ curs3 (số nguyên khóa) cho chọn * từ tenk1 trong đó độc đáo1 = key;

Cả ba biến này đều có kiểu dữ liệuRefcursor13866_13965BoundĐối với nó và cuối cùng có kèo bóng đá việt nam truy vấn được tham số hóa liên kết với nó. (Keysẽ được thay thế bằng giá trị tham số số nguyên khi kèo bóng đá việt nam trỏ được mở.) Biếncurs1được cho làkhông bị ràng buộcVì nó không bị ràng buộc với bất kỳ truy vấn cụ thể nào.

ThecuộnKhông thể sử dụng tùy chọn khi truy vấn của kèo bóng đá việt nam trỏ sử dụngđể cập nhật/chia sẻ. Ngoài ra, tốt nhất là sử dụngKhông có cuộnvới kèo bóng đá việt nam truy vấn liên quan đến các chức năng dễ bay hơi. Việc thực hiện14611_14619Giả sử rằng đọc lại đầu ra của truy vấn sẽ cho kết quả nhất quán, mà kèo bóng đá việt nam chức năng dễ bay hơi có thể không làm.

43.7.2. Mở kèo bóng đá việt nam trỏ#

Trước khi kèo bóng đá việt nam trỏ có thể được sử dụng để lấy hàng, nó phải làđã mở. (Đây là hành động tương đương với lệnh SQLPostgreSQL: Tài liệu: 16: kèo.)PL/PGSQLcó ba dạng củaMởCâu lệnh, hai trong số đó sử dụng các biến kèo bóng đá việt nam trỏ không liên kết trong khi loại thứ ba sử dụng biến kèo bóng đá việt nam trỏ ràng buộc.

Lưu ý

Các biến kèo bóng đá việt nam trỏ bị ràng buộc cũng có thể được sử dụng mà không cần mở rõ ràng kèo bóng đá việt nam trỏ, thông quachoCâu lệnh được mô tả trongPhần 43.7.4. MỘTchoVòng lặp sẽ mở kèo bóng đá việt nam trỏ và sau đó đóng lại khi vòng lặp hoàn thành.

Mở kèo bóng đá việt nam trỏ liên quan đến việc tạo cấu trúc dữ liệu bên trong máy chủ gọi làCổng thông tin, giữ trạng thái thực thi cho truy vấn của kèo bóng đá việt nam trỏ. Một cổng thông tin có một tên, phải là duy nhất trong phiên trong suốt thời gian tồn tại của cổng thông tin. Theo mặc định,PL/PGSQLsẽ gán một tên duy nhất cho mỗi cổng mà nó tạo ra. Tuy nhiên, nếu bạn gán giá trị chuỗi không null cho biến kèo bóng đá việt nam trỏ, chuỗi đó sẽ được sử dụng làm tên cổng thông tin của nó. Tính năng này có thể được sử dụng như mô tả trongPhần 43.7.3.5.

43.7.2.1.Mở cho Truy vấn #

MởUNBOUND_CURSORVAR[[17223_17229] cuộn] choTruy vấn;

Biến kèo bóng đá việt nam trỏ được mở và cung cấp truy vấn được chỉ định để thực thi. kèo bóng đá việt nam trỏ không thể mở và nó phải được khai báo là một biến kèo bóng đá việt nam trỏ không liên kết (nghĩa là, như một đơn giảnrefcursorBiến). Truy vấn phải làChọnhoặc kèo bóng đá việt nam cái gì đó khác trả về hàng (chẳng hạn nhưGiải thích). Truy vấn được xử lý theo cách tương tự như các lệnh SQL khác trongPL/PGSQL: PL/PGSQLTên biến được thay thế và kế hoạch truy vấn được lưu trong bộ nhớ cache để tái sử dụng có thể. Khi APL/PGSQLBiến được thay thế thành truy vấn kèo bóng đá việt nam trỏ, giá trị được thay thế là cái mà nó có tại thời điểmMở; Những thay đổi tiếp theo đối với biến sẽ không ảnh hưởng đến hành vi của kèo bóng đá việt nam trỏ. ThecuộnKhông có cuộnTùy chọn có ý nghĩa tương tự như đối với kèo bóng đá việt nam trỏ bị ràng buộc.

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

18399_18454

43.7.2.2.Mở để thực hiện #

MởUNBOUND_CURSORVAR[[Không] cuộn] để thực thiQuery_String[Sử dụngBiểu thức[, ...]];

Biến kèo bóng đá việt nam trỏ được mở và cung cấp truy vấn được chỉ định để thực thi. kèo bóng đá việt nam trỏ không thể mở và nó phải được khai báo là một biến kèo bóng đá việt nam trỏ không liên kết (nghĩa là, như một đơn giảnRefcursorBiến). Truy vấn được chỉ định làm biểu thức chuỗi, giống như trongthực thi19584_19686Phần 43.11.2), và nó cũng có nghĩa là thay thế biến không được thực hiện trên chuỗi lệnh. Như vớithực thi, giá trị tham số có thể được chèn vào lệnh động thông quađịnh dạng ()sử dụng. ThecuộnKhông cuộnTùy chọn có ý nghĩa tương tự như đối với kèo bóng đá việt nam trỏ bị ràng buộc.

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

20284_20377

Trong ví dụ này, tên bảng được chèn vào truy vấn quađịnh dạng (). Giá trị so sánh chocol1được chèn qua Asử dụngtham số, vì vậy nó không cần trích dẫn.

43.7.2.3. Mở một kèo bóng đá việt nam trỏ ràng buộc#

MởBound_cursorvar[([ arging_name: =]argarm_value[, ...])];

Hình thức này củaMởđược sử dụng để mở một biến kèo bóng đá việt nam trỏ mà truy vấn bị ràng buộc với nó khi nó được khai báo. kèo bóng đá việt nam trỏ không thể mở. Một danh sách các biểu thức giá trị đối số thực tế phải xuất hiện khi và chỉ khi kèo bóng đá việt nam trỏ được tuyên bố lấy các đối số. Các giá trị này sẽ được thay thế trong truy vấn.

Kế hoạch truy vấn cho một kèo bóng đá việt nam trỏ ràng buộc luôn được coi là có thể lưu trữ được; không có tương đươngthực thiTrong trường hợp này. Lưu ý rằngcuộnKhông có cuộnKhông thể được chỉ định trongMở, vì hành vi cuộn của kèo bóng đá việt nam trỏ đã được xác định.

Giá trị đối số có thể được truyền bằng cách sử dụngvị tríhoặccó tênKý hiệu. Trong ký hiệu vị trí, tất cả các đối số được chỉ định theo thứ tự. Trong ký hiệu được đặt tên, tên của mỗi đối số được chỉ định bằng: =Để tách nó khỏi biểu thức đối số. Tương tự như các chức năng gọi, được mô tả trongPhần 4.3, Nó cũng được phép trộn ký hiệu vị trí và ký hiệu.

Ví dụ (những ví dụ này sử dụng các ví dụ khai báo kèo bóng đá việt nam trỏ ở trên):

Mở Call2;
Mở Curs3 (42);
Mở Curs3 (khóa: = 42);

Vì sự thay thế biến được thực hiện trên truy vấn của kèo bóng đá việt nam trỏ bị ràng buộc, thực sự có hai cách để truyền các giá trị vào kèo bóng đá việt nam trỏ: với một đối số rõ ràng choMởhoặc ngầm bằng cách tham khảo APL/PGSQLBiến trong truy vấn. Tuy nhiên, chỉ các biến được khai báo trước khi kèo bóng đá việt nam trỏ bị ràng buộc được khai báo sẽ được thay thế vào nó. Trong cả hai trường hợp, giá trị được thông qua được xác định tại thời điểmMở. Ví dụ: kèo bóng đá việt nam cách khác để có được hiệu ứng tương tự nhưcurs3Ví dụ ở trên là

Khai báo
    số nguyên chính;
    kèo bóng đá việt nam trỏ curs4 cho chọn * từ tenk1 trong đó duy nhất1 = phím;
BẮT ĐẦU
    khóa: = 42;
    Mở curs4;

23624_23653#

Một khi kèo bóng đá việt nam trỏ đã được mở, nó có thể được thao tác với các câu lệnh được mô tả ở đây.

Những thao tác này không cần phải xảy ra trong cùng một chức năng mở kèo bóng đá việt nam trỏ để bắt đầu. Bạn có thể trả lại mộtRefcursorGiá trị từ một hàm và để người gọi hoạt động trên kèo bóng đá việt nam trỏ. (Bên trong, ArefcursorGiá trị chỉ đơn giản là tên chuỗi của cổng chứa truy vấn hoạt động cho kèo bóng đá việt nam trỏ. Tên này có thể được truyền xung quanh, được gán cho khácrefcursorBiến, v.v.

Tất cả các cổng được đóng hoàn toàn ở cuối giao dịch. Do đó A24446_24457Giá trị có thể sử dụng để chỉ tham chiếu kèo bóng đá việt nam trỏ mở cho đến khi kết thúc giao dịch.

43.7.3.1.Fetch #

Fetch [ Hướngtừ | TRONG]kèo bóng đá việt nam trỏthànhTarget;

FetchLấy hàng tiếp theo (theo hướng được chỉ định) từ kèo bóng đá việt nam trỏ thành mục tiêu, có thể là một biến hàng, biến bản ghi hoặc danh sách các biến đơn giản được phân tách bằng dấu phẩy, giống nhưChọn vào. Nếu không có hàng phù hợp, mục tiêu sẽ được đặt thành NULL (S). Như vớiChọn vào, Biến đặc biệttìm thấyCó thể kiểm tra xem có lấy được một hàng hay không. Nếu không có hàng, kèo bóng đá việt nam trỏ được định vị sau hàng cuối cùng hoặc trước hàng đầu tiên, tùy thuộc vào hướng chuyển động.

TheHướng25797_25853FetchLệnh ngoại trừ các lệnh có thể lấy nhiều hơn kèo bóng đá việt nam hàng; cụ thể là, nó có thể làTiếp theo, trước, Đầu tiên, cuối cùng, Tuyệt đối Đếm, tương đối Đếm, Chuyển tiếphoặcBackward. Bỏ quaHướnggiống như chỉ địnhTiếp theo. Trong các biểu mẫu bằng cách sử dụngĐếm, TheĐếmCó thể là bất kỳ biểu thức có giá trị số nguyên nào (không giống như SQLFetchlệnh, chỉ cho phép kèo bóng đá việt nam hằng số nguyên).HướngCác giá trị yêu cầu di chuyển về phía sau có khả năng bị hỏng trừ khi kèo bóng đá việt nam trỏ được khai báo hoặc mở vớicuộnTùy chọn.

kèo bóng đá việt nam trỏphải là tên của ArefcursorBiến tham chiếu một cổng kèo bóng đá việt nam trỏ mở.

Ví dụ:

Tìm nạp curs1 vào rowvar;
Tìm nạp curs2 vào foo, bar, baz;
Lấy cuối cùng từ Curs3 vào X, Y;
Tìm nạp tương đối -2 từ call4 vào x;

43.7.3.2.Di chuyển #

Di chuyển [ Hướngtừ | TRONG]kèo bóng đá việt nam trỏ;

Di chuyểnĐịnh vị lại một kèo bóng đá việt nam trỏ mà không cần truy xuất bất kỳ dữ liệu nào.Di chuyểnhoạt động nhưFetchlệnh, ngoại trừ nó chỉ định vị lại kèo bóng đá việt nam trỏ và không trả lại hàng chuyển đến. TheHướngmệnh đề có thể là bất kỳ biến thể nào được phép trong SQLFetchlệnh, bao gồm cả các lệnh có thể tìm nạp nhiều hơn một hàng; kèo bóng đá việt nam trỏ được định vị đến hàng cuối cùng như vậy. (Tuy nhiên, trường hợpHướngmệnh đề chỉ đơn giản là kèo bóng đá việt namĐếmBiểu thức không có từ khóa không được dùngPL/PGSQL. Cú pháp đó mơ hồ với trường hợpHướngmệnh đề bị bỏ qua hoàn toàn và do đó nó có thể thất bại nếuĐếmkhông phải là hằng số.) Như vớiChọn vào, biến đặc biệttìm thấyCó thể kiểm tra xem liệu có một hàng để di chuyển đến hay không. Nếu không có hàng như vậy, kèo bóng đá việt nam trỏ được định vị sau hàng cuối cùng hoặc trước hàng đầu tiên, tùy thuộc vào hướng chuyển động.

Ví dụ:

29268_29361

43.7.3.3.Cập nhật/xóa nơi hiện tại của #

Cập nhậtBảngĐặt ... trong đó hiện tại củakèo bóng đá việt nam trỏ;
Xóa khỏiBảngtrong đó hiện tại củakèo bóng đá việt nam trỏ;

Khi kèo bóng đá việt nam trỏ được định vị trên hàng bảng, hàng đó có thể được cập nhật hoặc xóa bằng cách sử dụng kèo bóng đá việt nam trỏ để xác định hàng. Có những hạn chế về truy vấn của kèo bóng đá việt nam trỏ có thể là gì (đặc biệt là không nhóm) và tốt nhất là sử dụngđể cập nhậtTrong kèo bóng đá việt nam trỏ. Để biết thêm thông tin, xemkhai báoTrang tham khảo.

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

Cập nhật foo set dataval = myVal trong đó dòng điện của curs1;

43.7.3.4.Đóng #

Đóngkèo bóng đá việt nam trỏ;

ĐóngĐóng cổng thông tin bên dưới một kèo bóng đá việt nam trỏ mở. Điều này có thể được sử dụng để phát hành tài nguyên sớm hơn cuối giao dịch hoặc để giải phóng biến kèo bóng đá việt nam trỏ để được mở lại.

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

Đóng Call1;

43.7.3.5. Trở lại kèo bóng đá việt nam trỏ#

PL/PGSQLCác chức năng có thể trả lại kèo bóng đá việt nam trỏ cho người gọi. Điều này rất hữu ích để trả về nhiều hàng hoặc cột, đặc biệt là với các bộ kết quả rất lớn. Để làm điều này, chức năng mở kèo bóng đá việt nam trỏ và trả lại tên kèo bóng đá việt nam trỏ cho người gọi (hoặc chỉ đơn giản là mở kèo bóng đá việt nam trỏ bằng tên cổng thông tin được chỉ định bởi hoặc được người gọi biết. Người gọi sau đó có thể lấy hàng từ kèo bóng đá việt nam trỏ. kèo bóng đá việt nam trỏ có thể được đóng bởi người gọi hoặc nó sẽ được đóng tự động khi giao dịch đóng.

32113_32268RefcursorBiến trước khi mở nó. Giá trị chuỗi củarefcursor32389_32417MởLà tên của cổng thông tin cơ bản. Tuy nhiên, nếurefcursorGiá trị của biến là NULL (vì nó sẽ theo mặc định), sau đóMởtự động tạo tên không xung đột với bất kỳ cổng thông tin hiện có nào và gán nó chorefcursorbiến.

ghi chú

trướcPOSTGRESQL16, các biến kèo bóng đá việt nam trỏ bị ràng buộc đã được khởi tạo để chứa tên riêng của chúng, thay vì bị bỏ lại dưới dạng null, do đó tên cổng thông tin bên dưới sẽ giống như tên của biến kèo bóng đá việt nam trỏ theo mặc định. Điều này đã được thay đổi bởi vì nó đã tạo ra quá nhiều rủi ro xung đột giữa các kèo bóng đá việt nam trỏ được đặt tên tương tự trong các chức năng khác nhau.

33252_33334

Tạo kiểm tra bảng (văn bản col);
Chèn vào các giá trị kiểm tra ('123');

Tạo chức năng Reffunc (refcursor) Trả về refcursor là '
BẮT ĐẦU
    Mở $ 1 cho chọn col từ bài kiểm tra;
    Trả lại $ 1;
KẾT THÚC;
'Ngôn ngữ plpgsql;

BẮT ĐẦU;
Chọn reffunc ('funccursor');
Tìm nạp tất cả trong funccursor;
LÀM;

Ví dụ sau sử dụng tạo tên kèo bóng đá việt nam trỏ tự động:

Tạo hàm reffunc2 () returns refcursor là '
TUYÊN BỐ
    ref refcursor;
BẮT ĐẦU
    Mở REF cho chọn Col từ thử nghiệm;
    Trả lại ref;
KẾT THÚC;
'Ngôn ngữ plpgsql;

- Cần phải trong một giao dịch để sử dụng kèo bóng đá việt nam trỏ.
BẮT ĐẦU;
Chọn reffunc2 ();

      Reffunc2
--------------------
 <kèo bóng đá việt nam trỏ không tên 1
(1 hàng)

Tìm nạp tất cả trong "<kèo bóng đá việt nam trỏ không tên 1";
LÀM;

Ví dụ sau đây hiển thị một cách để trả về nhiều kèo bóng đá việt nam trỏ từ một hàm duy nhất:

Tạo chức năng myfunc (refcursor, refcursor) Trả về setof refcur
BẮT ĐẦU
    Mở $ 1 cho chọn * từ TABLE_1;
    Trả lại tiếp theo $ 1;
    Mở $ 2 cho chọn * từ bảng_2;
    Trả lại tiếp theo $ 2;
KẾT THÚC;
$$ Ngôn ngữ plpgsql;

- Cần phải trong một giao dịch để sử dụng kèo bóng đá việt nam trỏ.
BẮT ĐẦU;

Chọn * từ myfunc ('a', 'b');

Tìm nạp tất cả từ a;
Tìm nạp tất cả từ b;
LÀM;

43.7.4. Lặp qua kết quả của kèo bóng đá việt nam trỏ#

Có kèo bóng đá việt nam biến thể củachoCâu lệnh cho phép lặp qua các hàng được trả về bởi một kèo bóng đá việt nam trỏ. Cú pháp là:

[<<nhãn ]
VÌRecordVarinBound_cursorvar[([ arging_name: =]argion_value[, ...])] vòng lặpcâuvòng lặp cuối [ nhãn ];

Biến kèo bóng đá việt nam trỏ phải bị ràng buộc với một số truy vấn khi nó được khai báo và nókhông thểĐã mở. ThechoCâu lệnh tự động mở kèo bóng đá việt nam trỏ và nó đóng lại kèo bóng đá việt nam trỏ khi vòng lặp thoát. Một danh sách các biểu thức giá trị đối số thực tế phải xuất hiện khi và chỉ khi kèo bóng đá việt nam trỏ được tuyên bố lấy các đối số. Các giá trị này sẽ được thay thế trong truy vấn, theo cách tương tự như trong mộtMở(xemPhần 43.7.2.3).

BiếnRecordVarđược định nghĩa tự động là loạiRecord36520_36741

Gửi hiệu chỉnh

37777_38003Mẫu nàyĐể báo cáo vấn đề tài liệu.