Thay vì thực hiện toàn bộ truy vấn cùng kèo bóng đá cúp c2 lúc, có thể thiết lập kèo bóng đá cúp c2kèo bóng đá cúp c2 trỏĐóng gói truy vấn, và sau đó đọc kết quả truy vấn kèo bóng đá cúp c2 vài hàng cùng kèo bóng đá cúp c2 lúc. kèo bóng đá cúp c2 lý do để làm điều này là để tránh ghi đè bộ nhớ khi kết quả chứa kèo bóng đá cúp c2 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ìcho
Loops tự động sử dụng kèo bóng đá cúp c2 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ề một tham chiếu đến kèo bóng đá cúp c2 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.
Tất cả quyền truy cập vào kèo bóng đá cúp c2 trỏ trongPL/PGSQLĐi qua các biến kèo bóng đá cúp c2 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 đá cúp c2 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 đá cúp c2 trỏ, nói chung là:
tên
[[không] cuộn] kèo bóng đá cúp c2 trỏ [(Đối số
)] choTruy vấn
;
(cho
có thể được thay thế bằnglà
choOracleKhả năng tương thích.) Nếucuộn
được chỉ định, kèo bóng đá cúp c2 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ẩy
Xá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 đá cúp c2 trỏ được mở.tên
Kiểu dữ liệu
kèo bóng đá cúp c2 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 bóng đá cúp c2 truy vấn được tham số hóa liên kết với nó. (Key
sẽ được thay thế bằng giá trị tham số số nguyên khi kèo bóng đá cúp c2 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ộn
Không thể sử dụng tùy chọn khi truy vấn của kèo bóng đá cúp c2 trỏ sử dụngđể cập nhật/chia sẻ
. Ngoài ra, tốt nhất là sử dụngKhông có cuộn
với kèo bóng đá cúp c2 truy vấn liên quan đến các chức năng dễ bay hơi. Việc thực hiệncuộn
Giả 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 đá cúp c2 chức năng dễ bay hơi có thể không làm.
Trước khi kèo bóng đá cúp c2 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 bóng đá cúp c2 trỏ
.)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 đá cúp c2 trỏ không liên kết trong khi thứ ba sử dụng biến kèo bóng đá cúp c2 trỏ ràng buộc.
Các biến kèo bóng đá cúp c2 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 bóng đá cúp c2 trỏ, thông quacho
Câu lệnh được mô tả trongPhần 43.7.4.
Mở cho
Truy vấn
MởUNBOUND_CURSORVAR
[[không] cuộn] choTruy vấn
;
Biến kèo bóng đá cúp c2 trỏ được mở và cung cấp truy vấn được chỉ định để thực thi. kèo bóng đá cúp c2 trỏ không thể mở và nó phải được khai báo là một biến kèo bóng đá cúp c2 trỏ không liên kết (nghĩa là, như một đơn giảnrefcursor
Biến). Truy vấn phải làChọn
hoặc kèo bóng đá cúp c2 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 đá cúp c2 trỏ, giá trị được thay thế là giá trị 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 đá cúp c2 trỏ.cuộn
vàKhông cuộn
Tùy chọn có ý nghĩa tương tự như đối với kèo bóng đá cúp c2 trỏ bị ràng buộc.
kèo bóng đá cúp c2 ví dụ:
17430_17485
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 bóng đá cúp c2 trỏ được mở và cung cấp truy vấn được chỉ định để thực thi. kèo bóng đá cúp c2 trỏ không thể mở và nó phải được khai báo là một biến kèo bóng đá cúp c2 trỏ không liên kết (nghĩa là, như một đơn giảnRefcursor
Biến). Truy vấn được chỉ định làm biểu thức chuỗi, giống như trongthực thi
lệ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 ()
vàsử dụng
. Thecuộn
vàKhông có cuộn
Tùy chọn có ý nghĩa tương tự như đối với kèo bóng đá cúp c2 trỏ bị ràng buộc.
kèo bóng đá cúp c2 ví dụ:
19217_19310
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ụng
tham số, vì vậy nó không cần trích dẫn.
MởBound_cursorvar
[([arging_name
: =]argarm_value
[, ...])];
Hình thức nàyMở
được sử dụng để mở một biến kèo bóng đá cúp c2 trỏ mà truy vấn bị ràng buộc với nó khi nó được khai báo. kèo bóng đá cúp c2 trỏ không thể mở.
Kế hoạch truy vấn cho một kèo bóng đá cúp c2 trỏ ràng buộc luôn được coi là có thể lưu trữ được; không có tương đươngthực thi
Trong trường hợp này. Lưu ý rằngcuộn
vàKhông có cuộn
Không thể được chỉ định trongMở
, vì hành vi cuộn của kèo bóng đá cúp c2 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à ký hiệu.
Ví dụ (chúng sử dụng các ví dụ khai báo kèo bóng đá cúp c2 trỏ ở trên):
Mở Call2;
Vì sự thay thế biến được thực hiện trên truy vấn của kèo bóng đá cúp c2 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 đá cúp c2 trỏ: với một đối số rõ ràng choMở
hoặc hoàn toàn 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 đá cúp c2 trỏ bị ràng buộc được khai báo sẽ được thay thế vào nó.Mở
. Ví dụ: kèo bóng đá cúp c2 cách khác để có được hiệu ứng tương tự nhưcurs3
Ví dụ ở trên là
Khai báo
Một khi kèo bóng đá cúp c2 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 đá cúp c2 trỏ để bắt đầu. Bạn có thể trả lại mộtRefcursor
Giá trị từ một hàm và để người gọi hoạt động trên kèo bóng đá cúp c2 trỏ. (Bên trong, Arefcursor
Giá 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 bóng đá cúp c2 trỏ. Tên này có thể được truyền xung quanh, được gán cho khácrefcursor
Biế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 đó ARefcursor
Giá trị có thể sử dụng để tham khảo một kèo bóng đá cúp c2 trỏ mở cho đến khi kết thúc giao dịch.
Fetch
Fetch [Hướng
từ | TRONG]kèo bóng đá cúp c2 trỏ
thànhTarget
;
Fetch
Lấy hàng tiếp theo từ kèo bóng đá cúp c2 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 tiếp theo, mục tiêu sẽ được đặt thành NULL (S).Chọn vào
, biến đặc biệttìm thấy
Có thể kiểm tra xem có lấy được kèo bóng đá cúp c2 hàng hay không.
TheHướng
mệ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 bóng đá cúp c2 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ếp
hoặclùi
. Bỏ quaHướng
giống như chỉ địnhTiếp theo
. Trong các biểu mẫu bằng cách sử dụngĐếm
, TheĐếm
Có thể là bất kỳ biểu thức có giá trị số nguyên nào (không giống như SQLFetch
lệnh, chỉ cho phép kèo bóng đá cúp c2 hằng số nguyên).Hướng
Cá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 đá cúp c2 trỏ được khai báo hoặc mở vớicuộn
Tùy chọn.
kèo bóng đá cúp c2 trỏ
phải là tên của Arefcursor
Biến tham chiếu một cổng kèo bóng đá cúp c2 trỏ mở.
Ví dụ:
Tìm nạp curs1 vào rowvar;
Di chuyển
Di chuyển [Hướng
từ | TRONG]kèo bóng đá cúp c2 trỏ
;
Di chuyển
Định vị lại một kèo bóng đá cúp c2 trỏ mà không cần truy xuất bất kỳ dữ liệu nào.Di chuyển
hoạt động giống hệtFetch
Lệnh, ngoại trừ nó chỉ định vị lại kèo bóng đá cúp c2 trỏ và không trả lại hàng chuyển đến. Như vớiChọn vào
, biến đặc biệttìm thấy
Có thể kiểm tra xem liệu có hàng tiếp theo để di chuyển đến.
Ví dụ:
di chuyển call1;
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 đá cúp c2 trỏ
;Bảng
hiện tại củakèo bóng đá cúp c2 trỏ
;
Khi một kèo bóng đá cúp c2 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 bóng đá cúp c2 trỏ để xác định hàng. Có những hạn chế về truy vấn của kèo bóng đá cúp c2 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ật
Trong kèo bóng đá cúp c2 trỏ. Để biết thêm thông tin, xemkhai báoTrang tham khảo.
kèo bóng đá cúp c2 ví dụ:
Cập nhật foo set dataval = myVal trong đó dòng điện của curs1;
Đóng
Đóngkèo bóng đá cúp c2 trỏ
;
Đóng
Đóng cổng thông tin bên dưới một kèo bóng đá cúp c2 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 đá cúp c2 trỏ để được mở lại.
kèo bóng đá cúp c2 ví dụ:
Đóng Call1;
PL/PGSQLCác chức năng có thể trả lại kèo bóng đá cúp c2 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 bóng đá cúp c2 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 choRefcursor
Biến trước khi mở nó. Giá trị chuỗi củarefcursor
Biế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ếurefcursor
Biế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ó chorefcursor
Biến.
Biến kèo bóng đá cúp c2 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ó, do đó tên cổng thông tin giống như tên biến kèo bóng đá cúp c2 trỏ, trừ khi lập trình viên ghi đè nó bằng cách gán trước khi mở kèo bóng đá cúp c2 trỏ. Nhưng một biến số kèo bóng đá cúp c2 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 một tên kèo bóng đá cúp c2 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);
Ví dụ sau sử dụng tạo tên kèo bóng đá cúp c2 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 bóng đá cúp c2 trỏ từ một hàm duy nhất:
31622_31983
Có kèo bóng đá cúp c2 biến thể củacho
Câu lệnh cho phép lặp qua các hàng được trả về bởi một kèo bóng đá cúp c2 trỏ. Cú pháp là:
[<<nhãn
]RecordVar
inBound_cursorvar
[([argion_name
: =]argion_value
[, ...])] vòng lặpcâu
vòng lặp cuối [nhãn
];
Biến kèo bóng đá cúp c2 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ở. Thecho
Câu lệnh tự động mở kèo bóng đá cúp c2 trỏ và nó đóng lại kèo bóng đá cúp c2 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 kèo bóng đá cúp c2 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ạiRecord
và 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 bóng đá cúp c2 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.