10 sql
我可以在程序中传递光标吗?
CURSOR BLT_CURSOR IS
SELECT BLT.sol_id,
BLT.bill_id,
BLT.bank_id
FROM BLT;
Run Code Online (Sandbox Code Playgroud)
是我的光标.
Procedure abc(i want to pass the cursor here)
Run Code Online (Sandbox Code Playgroud)
我该怎么做.
Ton*_*ews 12
我假设您使用的是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;
Run Code Online (Sandbox Code Playgroud)
然后使用它:
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;
Run Code Online (Sandbox Code Playgroud)
但是,请注意,过程abc需要知道游标的结构,即它返回3列特定类型.如果您希望能够将任何游标传递给该过程,那么您需要查看使用DBMS_SQL包(这不是一件容易的事!)
这在MSSQL2005中是不可能的。2008年或者其他平台我不知道。
我已经好几次想这样做了。它将支持更加模块化的架构。我可以有一个对数据集执行常见过程的过程,但能够从各种其他过程将光标传递到该数据集。