回答

收藏

在Oracle中遍历显式游标

技术问答 技术问答 260 人阅读 | 0 人回复 | 2023-09-14

如何遍历例如从查询创建的隐式游标?
. G+ B% K! v6 g* v4 j$ k. G这是示例代码:
/ _4 w7 A/ y4 Q2 O. ~. lSERVEROUTPUT on;7 A9 w0 j( _* ^+ U7 S
DECLARE      
# ^9 P! p! _5 z' c9 i  TYPE ref_cursor IS REF CURSOR;9 p/ V2 o# H! x. |  C# @- y. t5 f
  cur REF_CURSOR;
$ h2 M& d9 v* o+ z5 c+ K8 J, N9 sBEGIN6 D: s8 v1 V# I+ J, l! r
  OPEN cur FOR 'SELECT i.item_no, & s3 R+ h" P5 i$ v
                       i.item_descr
4 ]8 N) a( M# l7 ]0 _                  FROM ITEMS i
  Y  T6 {8 z9 W$ v! T- m. O                 WHERE i.item_no in (1,2,3)';
1 E; |+ s& F  f3 H4 r  ... loop statement to print all item descriptions?
7 q1 Q; j4 G+ ^  f& n0 l( j- z; Y6 t2 SEND;
7 F4 D  |% g" ^; C6 ?+ {               
0 r2 ]# g/ w; _% {解决方案:- W7 N8 N3 Q( W& h& P5 M. ^
                ! W9 Y. [& x7 ^6 ?* H) y1 ?# t
% ^+ Z7 U8 a8 K6 S( R8 b
* r7 N( A! F/ a# Z
                这是允许动态SQL的方法。您可以根据需要在代码中构建查询字符串(适用于有关SQL注入的常规警告)。
( }4 `6 B- G. w3 `DECLARE      + G" X# U  C- r# n
  TYPE ref_cursor IS REF CURSOR;
/ ?1 _. M- j, ?+ i/ b8 X4 d  cur REF_CURSOR;7 V/ I9 Y) r+ X6 U9 N: i9 a% s8 y; R7 T
  d_item_no  items.item_no%TYPE;
  v/ g7 y6 S! n* O8 h  a  \) E  d_item_descr  items.item_descr%TYPE;! X+ @5 g9 z! n0 N1 X# X2 M
BEGIN
$ P: I+ c% a$ J4 m9 M4 O0 O, f4 ?  OPEN cur FOR 'SELECT i.item_no, : B6 z6 F: `. I% N. a; }
                       i.item_descr
/ S& j& ~! i, f3 M7 V$ O7 n! y                  FROM ITEMS i
9 v& ~' z/ C, L- ^! d                 WHERE i.item_no in (1,2,3)';4 \% X% |3 e  B. e1 Y& s
  LOOP2 Z/ D, e" T+ D
    FETCH cur INTO d_item_no, d_item_descr;0 v1 Q9 l# b; i
    EXIT WHEN cur%NOTFOUND;+ m8 N/ x, J% d
    dbms_output.put_line( d_item_no||' '||d_item_descr );; d& y/ y* J) [
  END LOOP;
% i& l7 `% m' V3 S7 i8 a8 ?  CLOSE cur;! `' u  B4 M- t1 l1 I
END;
( U3 P1 O; J5 w0 R' A  u2 V  F8 h, X$ I/
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则