我可以在程序中传递光标吗?
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)
我该怎么做.
我假设您使用的是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包(这不是一件容易的事!)