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.7. tỷ lệ kèo bóng đá tối nay trỏ#

Thay vì thực hiện toàn bộ truy vấn cùng tỷ lệ kèo bóng đá tối nay lúc, có thể thiết lập tỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay trỏĐóng gói truy vấn, và sau đó đọc kết quả truy vấn tỷ lệ kèo bóng đá tối nay vài hàng cùng tỷ lệ kèo bóng đá tối nay lúc. tỷ lệ kèo bóng đá tối nay lý do để làm điều này là để tránh ghi đè bộ nhớ khi kết quả chứa tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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.

41.7.1. Khai báo các biến tỷ lệ kèo bóng đá tối nay trỏ#

Tất cả quyền truy cập vào tỷ lệ kèo bóng đá tối nay trỏ trongPL/PGSQLĐi qua các biến tỷ lệ kèo bóng đá tối nay trỏ, luôn thuộc loại dữ liệu đặc biệtrefcursor. Một cách để tạo biến tỷ lệ kèo bóng đá tối nay trỏ chỉ là khai báo nó là một biến của loạirefcursor12353_12430

tên[[Không] cuộn] tỷ lệ kèo bóng đá tối nay 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, tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ được mở.

tỷ lệ kèo bóng đá tối nay số ví dụ:

Khai báo
    Curs1 refcursor;
    tỷ lệ kèo bóng đá tối nay trỏ curs2 cho chọn * từ tenk1;
    tỷ lệ kèo bóng đá tối nay 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ệurefcursor, nhưng lần đầu tiên có thể được sử dụng với bất kỳ truy vấn nào, tỷ lệ kèo bóng đá tối nay khi thứ hai có truy vấn được chỉ định đầy đủ đã được chỉ địnhBoundĐối với nó và cuối cùng có tỷ lệ kèo bóng đá tối nay truy vấn được tham số hóa liên kết với nó. (Key14117_14208curs1đượ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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay truy vấn liên quan đến các chức năng dễ bay hơi. Việc thực hiệncuộnGiả sử rằng đọc lại đầu ra của truy vấn sẽ cho kết quả nhất quán, mà tỷ lệ kèo bóng đá tối nay chức năng dễ bay hơi có thể không làm.

41.7.2. Mở tỷ lệ kèo bóng đá tối nay trỏ#

Trước khi tỷ lệ kèo bóng đá tối nay trỏ có thể được sử dụng để truy xuất hàng, nó phải làMở. (Đây là hành động tương đương với lệnh SQLTuyên bố tỷ lệ kèo bóng đá tối nay trỏ.)PL/PGSQLCó ba dạng củaMởCâu lệnh, hai trong số đó sử dụng các biến tỷ lệ kèo bóng đá tối nay trỏ không liên kết trong khi loại thứ ba sử dụng biến tỷ lệ kèo bóng đá tối nay trỏ bị ràng buộc.

15545_15551

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

Mở tỷ lệ kèo bóng đá tối nay 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 tin16164_16341PL/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 tỷ lệ kèo bóng đá tối nay 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 41.7.3.5.

41.7.2.1.Mở cho Truy vấn #

MởUNBOUND_CURSORVAR[[không] cuộn] choTruy vấn;

Biến tỷ lệ kèo bóng đá tối nay trỏ được mở và cung cấp truy vấn được chỉ định để thực thi. tỷ lệ kèo bóng đá tối nay trỏ không thể mở và nó phải được khai báo là một biến tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nayPL/PGSQL: PL/PGSQLTên biến được thay thế và gói truy vấn được lưu tỷ lệ kèo bóng đá tối nay bộ nhớ cache để tái sử dụng. Khi APL/PGSQL18004_18121Mở; Những thay đổi tiếp theo đối với biến sẽ không ảnh hưởng đến hành vi của tỷ lệ kèo bóng đá tối nay trỏ. ThecuộnKhông cuộnTùy chọn có ý nghĩa tương tự như đối với tỷ lệ kèo bóng đá tối nay trỏ bị ràng buộc.

tỷ lệ kèo bóng đá tối nay ví dụ:

18428_18483

41.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[, ...]];

19267_19459RefcursorBiến). Truy vấn được chỉ định làm biểu thức chuỗi, giống như tỷ lệ kèo bóng đá tối naythực thilệnh. Như thường lệ, điều này mang lại sự linh hoạt để gói truy vấn có thể thay đổi từ lần chạy này sang lần chạy tiếp theo (xemPhần 41.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 có cuộnTùy chọn có ý nghĩa tương tự như đối với tỷ lệ kèo bóng đá tối nay trỏ bị ràng buộc.

tỷ lệ kèo bóng đá tối nay ví dụ:

20313_20406

tỷ lệ kèo bóng đá tối nay 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.

41.7.2.3. Mở một tỷ lệ kèo bóng đá tối nay trỏ ràng buộc#

MởBound_cursorvar[([ argion_name: =]argarn_value[, ...])];

Hình thức này củaMởđược sử dụng để mở một biến tỷ lệ kèo bóng đá tối nay trỏ mà truy vấn bị ràng buộc với nó khi nó được khai báo. tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ ràng buộc luôn được coi là có thể lưu trữ được; không có tương đươngthực thitỷ lệ kèo bóng đá tối nay trường hợp này. Lưu ý rằngcuộnKhông có cuộnKhông thể được chỉ định tỷ lệ kèo bóng đá tối nayMở, vì hành vi cuộn của tỷ lệ kèo bóng đá tối nay trỏ đã được xác định.

Giá trị đối số có thể được truyền bằng cách sử dụngvị tríhoặcĐược đặt tênKý hiệu. tỷ lệ kèo bóng đá tối nay ký hiệu vị trí, tất cả các đối số được chỉ định theo thứ tự. tỷ lệ kèo bóng đá tối nay 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ả tỷ lệ kèo bóng đá tối nayPhầ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 tỷ lệ kèo bóng đá tối nay trỏ ở trên):

22663_22717

22731_22892Mở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 tỷ lệ kèo bóng đá tối nay 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ụ: tỷ lệ kèo bóng đá tối nay 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;
    tỷ lệ kèo bóng đá tối nay trỏ curs4 cho chọn * từ tenk1 trong đó duy nhất1 = phím;
BẮT ĐẦU
    khóa: = 42;
    Mở curs4;

41.7.3. Sử dụng tỷ lệ kèo bóng đá tối nay trỏ#

Một khi tỷ lệ kèo bóng đá tối nay 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ở tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 đó ArefcursorGiá trị có thể sử dụng để tham khảo một tỷ lệ kèo bóng đá tối nay trỏ mở cho đến khi kết thúc giao dịch.

41.7.3.1.Fetch #

tìm nạp [ Hướngtừ | tỷ lệ kèo bóng đá tối nay]tỷ lệ kèo bóng đá tối nay trỏthànhTarget;

FetchLấy hàng tiếp theo (theo hướng được chỉ định) từ tỷ lệ kèo bóng đá tối nay 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, tỷ lệ kèo bóng đá tối nay 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ướngmệnh đề có thể là bất kỳ biến thể nào được phép tỷ lệ kèo bóng đá tối nay SQLFetchLệnh ngoại trừ các lệnh có thể tìm nạp nhiều hơn tỷ lệ kèo bóng đá tối nay hàng; cụ thể là, nó có thể làTiếp theo, Trước, Đầu tiên, Last, Tuyệt đối Đếm, tương đối Đếm, Chuyển tiếphoặcBackward. Bỏ quaHướnggiống như chỉ địnhTiếp theo. tỷ lệ kèo bóng đá tối nay 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ư SQL26768_26775lệnh, chỉ cho phép tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ được khai báo hoặc mở vớicuộnTùy chọn.

tỷ lệ kèo bóng đá tối nay trỏphải là tên của ArefcursorBiến tham chiếu cổng tỷ lệ kèo bóng đá tối nay 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;

41.7.3.2.Di chuyển #

Di chuyển [ Hướngtừ | tỷ lệ kèo bóng đá tối nay]tỷ lệ kèo bóng đá tối nay trỏ;

Di chuyểnĐịnh vị lại một tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay SQLFetchLệnh, bao gồm cả các lệnh có thể lấy nhiều hơn một hàng; tỷ lệ kèo bóng đá tối nay 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à tỷ lệ kèo bóng đá tối nayĐếmBiểu thức không có từ khóa nào không được dùng tỷ lệ kèo bóng đá tối nayPL/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, tỷ lệ kèo bóng đá tối nay 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ụ:

di chuyển call1;
Di chuyển cuối cùng từ curs3;
Di chuyển tương đối -2 từ call4;
Di chuyển về phía trước 2 từ CULS4;

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

Cập nhậtBảngĐặt ... tỷ lệ kèo bóng đá tối nay đó hiện tại củatỷ lệ kèo bóng đá tối nay trỏ;
Xóa khỏiBảngtỷ lệ kèo bóng đá tối nay đó hiện tại củatỷ lệ kèo bóng đá tối nay trỏ;

Khi tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ để xác định hàng. Có những hạn chế về truy vấn của tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ. Để biết thêm thông tin, xemkhai báoTrang tham khảo.

tỷ lệ kèo bóng đá tối nay ví dụ:

Cập nhật foo set dataval = myVal tỷ lệ kèo bóng đá tối nay đó dòng điện của curs1;

41.7.3.4.Đóng #

Đóngtỷ lệ kèo bóng đá tối nay trỏ;

ĐóngĐóng cổng thông tin bên dưới một tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ để được mở lại.

tỷ lệ kèo bóng đá tối nay ví dụ:

Đóng Call1;

41.7.3.5. Trở lại tỷ lệ kèo bóng đá tối nay trỏ31555_31558

PL/PGSQLCác chức năng có thể trả lại tỷ lệ kèo bóng đá tối nay 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ở tỷ lệ kèo bóng đá tối nay trỏ và trả lại tên tỷ lệ kèo bóng đá tối nay trỏ cho người gọi (hoặc chỉ đơn giản là mở tỷ lệ kèo bóng đá tối nay 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ừ tỷ lệ kèo bóng đá tối nay trỏ. tỷ lệ kèo bóng đá tối nay trỏ có thể được đóng bởi người gọi hoặc nó sẽ được đóng tự động khi giao dịch đóng.

Tên cổng thông tin được sử dụng cho tỷ lệ kèo bóng đá tối nay trỏ có thể được chỉ định bởi lập trình viên hoặc tự động tạo. Để chỉ định tên cổng thông tin, chỉ cần gán một chuỗi chorefcursorBiến trước khi mở nó. Giá trị chuỗi củarefcursorBiến sẽ được sử dụng bởiMởlà tên của cổng thông tin cơ bản. Tuy nhiên, nếurefcursor32567_32628Mở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.

Lưu ý

trướcPOSTGRESQL16, các biến tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ được đặt tên tương tự trong các chức năng khác nhau.

Ví dụ sau đây hiển thị một cách một tên tỷ lệ kèo bóng đá tối nay trỏ có thể được cung cấp bởi người gọi:

Tạo thử nghiệm 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ả tỷ lệ kèo bóng đá tối nay funccursor;
LÀM;

Ví dụ sau sử dụng tạo tên tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ.
BẮT ĐẦU;
Chọn reffunc2 ();

      Reffunc2
--------------------
 <tỷ lệ kèo bóng đá tối nay trỏ không tên 1
(1 hàng)

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

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

34293_34654

41.7.4. Lặp qua kết quả của tỷ lệ kèo bóng đá tối nay trỏ#

Có tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay trỏ. Cú pháp là:

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

Biến tỷ lệ kèo bóng đá tối nay 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ở tỷ lệ kèo bóng đá tối nay trỏ và nó đóng lại tỷ lệ kèo bóng đá tối nay trỏ khi vòng lặp thoát ra. 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 tỷ lệ kèo bóng đá tối nay 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 41.7.2.3).

BiếnRecordVarđược định nghĩa tự động là loạiRecordvà chỉ tồn tại bên trong vòng lặp (bất kỳ định nghĩa hiện có nào về tên biến đều bị bỏ qua trong vòng lặp). Mỗi hàng được trả về bởi tỷ lệ kèo bóng đá tối nay trỏ được gán liên tiếp cho biến bản ghi này và phần thân vòng được thực thi.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì tỷ lệ kèo bóng đá tối nay 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.