使用Oracle 10g DBMS,我想在過程中應用DBMS_SQL.execute_and_fetch
。我拒絕EXECUTE IMMEDIATE
,因爲我想綁定命名變量,並且不依賴於它們在語句中的順序。使用DBMS_SQL.Execute_and_fetch - 獲取Ref Cursor(10g)的遊標編號
問題是,我無法獲得傳遞到我的過程的參考遊標參數的遊標編號的句柄。這裏是我想要做的一個示例代碼片段。
PROCEDURE TestProc(vuserid INTEGER,
olist OUT refcur)
IS
cursor_num INTEGER;
vsql VARCHAR2(1000 CHAR);
BEGIN
vsql := 'SELECT * FROM USERS WHERE USER_ID = :user_id';
/*creates a new cursor. Need to use the cursor that is passed to my procedure*/
/*cursor_num := dbms_sql.open_cursor; */
/*Only available in 11g onwards */
/*cursor_num := dbms_sql.to_cursor_number(olist); */
sys.dbms_sql.parse(cursor_num, vsql, sys.dbms_sql.native);
sys.dbms_sql.bind_variable(cursor_num, ':user_id', vuserid);
sys.dbms_sql.execute_and_fetch(cursor_num, FALSE);
END TestProc;
如何成功地使用DBMS_SQL.execute_and_fetch
過程中我的具體情況,其中用於獲取光標裁判光標我通過?
我假設'olist'必須是'IN'參數,不是嗎? –
嗨Wernfried。不,它是寫出來的。我正在使用ODP.Net調用該過程,根據文檔它應該是OUT。見[這裏](http://docs.oracle.com/cd/B19306_01/win.102/b14307/featRefCursor.htm#i1008035) –