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 chấp bóng đá hôm nay trỏ

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

43.7.1. Khai báo các biến kèo chấp bóng đá hôm nay trỏ

Tất cả quyền truy cập vào kèo chấp bóng đá hôm nay trỏ trongPL/PGSQLĐi qua các biến kèo chấp bóng đá hôm nay trỏ, luôn thuộc loại dữ liệu đặc biệtrefcursor. Một cách để tạo biến kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay trỏ, nói chung là:

tên[[không] cuộn] kèo chấp bóng đá hôm nay trỏ [(Đối số)] choTruy vấn;

(chocó thể được thay thế bằngchoOracleTương thích.) Nếucuộnđược chỉ định, kèo chấp bóng đá hôm 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 kèo chấp bóng đá hôm nay trỏ được mở.

kèo chấp bóng đá hôm nay số ví dụ:

Khai báo

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, trong khi thứ hai có truy vấn được chỉ định đầy đủ đã được chỉ địnhBoundĐối với nó và cuối cùng có kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm 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 kèo chấp bóng đá hôm 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à kèo chấp bóng đá hôm nay chức năng dễ bay hơi có thể không làm.

43.7.2. Mở kèo chấp bóng đá hôm nay trỏ

Trước khi kèo chấp bóng đá hôm nay 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 SQLTuyên bố kèo chấp bóng đá hôm nay trỏ.)PL/PGSQLCó ba dạng củaMởCâu lệnh, hai trong số đó sử dụng các biến kèo chấp bóng đá hôm nay trỏ không liên kết trong khi loại thứ ba sử dụng biến kèo chấp bóng đá hôm nay trỏ bị ràng buộc.

Lưu ý

Các biến kèo chấp bóng đá hôm 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 kèo chấp bóng đá hôm nay trỏ, thông quachoCâu lệnh được mô tả trongPhần 43.7.4.

43.7.2.1.Mở cho Truy vấn

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

Biến kèo chấp bóng đá hôm nay trỏ được mở và cung cấp truy vấn được chỉ định để thực thi. kèo chấp bóng đá hôm nay trỏ không thể mở và nó phải được khai báo là một biến kèo chấp bóng đá hôm 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 kèo chấp bóng đá hôm 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 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 chấp bóng đá hôm nay trỏ, giá trị được thay thế là một trong những điều 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 chấp bóng đá hôm nay trỏ.cuộnKhông cuộnTùy chọn có ý nghĩa tương tự như đối với kèo chấp bóng đá hôm nay trỏ bị ràng buộc.

kèo chấp bóng đá hôm nay ví dụ:

17220_17275

43.7.2.2.Mở để thực thi

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

Biến kèo chấp bóng đá hôm nay trỏ được mở và cung cấp truy vấn được chỉ định để thực thi. kèo chấp bóng đá hôm nay trỏ không thể mở và nó phải được khai báo là một biến kèo chấp bóng đá hôm nay 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 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 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 có cuộnTùy chọn có ý nghĩa tương tự như đối với kèo chấp bóng đá hôm nay trỏ bị ràng buộc.

kèo chấp bóng đá hôm nay ví dụ:

19007_19100

Trong ví dụ này, tên bảng được chèn vào truy vấn thông 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 chấp bóng đá hôm nay trỏ ràng buộc

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

Hình thức nàyMởđược sử dụng để mở một biến kèo chấp bóng đá hôm nay trỏ mà truy vấn bị ràng buộc với nó khi nó được khai báo. kèo chấp bóng đá hôm nay trỏ không thể mở.

Kế hoạch truy vấn cho một kèo chấp bóng đá hôm nay 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 cuộnKhông thể được chỉ định trongMở, vì hành vi cuộn của kèo chấp bóng đá hôm 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. Trong ký hiệu vị trí, tất cả các đối số được chỉ định theo thứ tự.: =Để 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à được đặt tên.

Ví dụ (chúng sử dụng các ví dụ khai báo kèo chấp bóng đá hôm nay trỏ ở trên):

Mở Curs2;

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

Khai báo

43.7.3. Sử dụng kèo chấp bóng đá hôm nay trỏ

Một khi kèo chấp bóng đá hôm 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ở kèo chấp bóng đá hôm 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 kèo chấp bóng đá hôm nay trỏ. (Bên trong, ArefcursorGiá trị chỉ đơn giản là tên chuỗi của một cổng thông tin được gọi là truy vấn hoạt động cho kèo chấp bóng đá hôm nay trỏ. Tên này có thể được truyền xung quanh, được gán cho khácrefcursorBiến, v.v., mà không làm phiền cổng thông tin.)

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 kèo chấp bóng đá hôm nay trỏ mở cho đến khi kết thúc giao dịch.

43.7.3.1.Fetch

tìm nạp [ Hướngtừ | TRONG]kèo chấp bóng đá hôm nay trỏthànhTarget;

FetchLấy hàng tiếp theo (theo hướng được chỉ định) từ kèo chấp bóng đá hôm 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).Chọn vào, biến đặc biệttìm thấycó thể được kiểm tra xem có nhận được một hàng hay không. Nếu không có hàng, kèo chấp bóng đá hôm 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 trong SQLFetchLệnh ngoại trừ các lệnh có thể tìm nạp nhiều hơn kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay hằng số nguyên).HướngCác giá trị yêu cầu di chuyển ngược có khả năng bị hỏng trừ khi kèo chấp bóng đá hôm nay trỏ được khai báo hoặc mở vớicuộnTùy chọn.

kèo chấp bóng đá hôm nay trỏphải là tên của ArefcursorBiến tham chiếu một cổng kèo chấp bóng đá hôm nay trỏ mở.

Ví dụ:

Tìm nạp curs1 vào rowvar;

43.7.3.2.Di chuyển

Di chuyển [ Hướngtừ | TRONG]kèo chấp bóng đá hôm nay trỏ;

Di chuyểnĐịnh vị lại một kèo chấp bóng đá hôm 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 kèo chấp bóng đá hôm 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 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 chấp bóng đá hôm nay trỏ được định vị đến hàng cuối cùng như vậy.Hướngmệnh đề chỉ đơn giản là kèo chấp bóng đá hôm nayĐế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 chấp bóng đá hôm 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;

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 chấp bóng đá hôm nay trỏ;Bảngnơi hiện tại củakèo chấp bóng đá hôm nay trỏ;

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

kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay trỏ;

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

kèo chấp bóng đá hôm nay ví dụ:

Đóng Curs1;

43.7.3.5. Trở lại kèo chấp bóng đá hôm nay trỏ

PL/PGSQLCác chức năng có thể trả lại kèo chấp bóng đá hôm 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.

Tên cổng thông tin được sử dụng cho kèo chấp bóng đá hôm 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ếurefcursorBiến là NULL,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.

Lưu ý

Biến kèo chấp bóng đá hôm nay trỏ bị ràng buộc được khởi tạo thành giá trị chuỗi đại diện cho tên của nó, sao cho tên cổng thông tin giống như tên biến kèo chấp bóng đá hôm nay trỏ, trừ khi lập trình viên ghi đè nó bằng cách gán trước khi mở kèo chấp bóng đá hôm nay trỏ. Nhưng một biến số kèo chấp bóng đá hôm nay trỏ không liên kết mặc định ban đầu cho giá trị null, do đó nó sẽ nhận được một tên duy nhất được tạo tự động, trừ khi được ghi đè.

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

Tạo thử nghiệm bảng (văn bản col);

Ví dụ sau sử dụng tạo tên kèo chấp bóng đá hôm nay trỏ tự động:

Tạo hàm reffunc2 () trả về refcursor là '

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

Tạo chức năng myfunc (refcursor, refcursor) Trả về setof refcur

43.7.4. Lặp qua kết quả của kèo chấp bóng đá hôm nay trỏ

Có kèo chấp bóng đá hôm 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 kèo chấp bóng đá hôm nay trỏ. Cú pháp là:

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

Biến kèo chấp bóng đá hôm 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ở kèo chấp bóng đá hôm nay trỏ và nó đóng lại kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay trỏ được tuyên bố lấy các đối số.Mở(xemPhần 43.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 của tên biến đều bị bỏ qua trong vòng lặp). Mỗi hàng được trả về bởi kèo chấp bóng đá hôm 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ì trong tài liệu không chính xác, không phù hợpMẫu nàyĐể báo cáo vấn đề tài liệu.