当前位置:  开发笔记 > 数据库 > 正文

我可以在程序中传递光标吗?

如何解决《我可以在程序中传递光标吗?》经验,为你挑选了1个好方法。

我可以在程序中传递光标吗?

CURSOR  BLT_CURSOR IS
SELECT  BLT.sol_id,
        BLT.bill_id,
        BLT.bank_id
FROM BLT;

是我的光标.

Procedure abc(i want to pass the cursor here)

我该怎么做.



1> Tony Andrews..:

我假设您使用的是Oracle(看起来如此).

你可以这样做:

PROCEDURE abc( p_cursor IN SYS_REFCURSOR) IS
   v_sol_id blt.sol_id%TYPE;
   v_bill_id blt.bill_id%TYPE;
   v_bank_id blt.bank_id%TYPE;
BEGIN
   LOOP
      FETCH p_cursor INTO v_sol_id, v_bill_id, v_bank_id;
      EXIT WHEN p_cursor%NOTFOUND;
      ...
   END LOOP;
END;

然后使用它:

DECLARE
   v_cursor SYS_REFCURSOR;
BEGIN
   OPEN v_cursor FOR
      SELECT  BLT.sol_id,
              BLT.bill_id,
              BLT.bank_id
      FROM BLT;
   abc (v_cursor);
   CLOSE v_cursor;
END;

但是,请注意,过程abc需要知道游标的结构,即它返回3列特定类型.如果您希望能够将任何游标传递给该过程,那么您需要查看使用DBMS_SQL包(这不是一件容易的事!)

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有