【发布时间】:2014-05-07 09:09:24
【问题描述】:
使用Oracle 10g DBMS,我想在一个过程中应用DBMS_SQL.execute_and_fetch。我拒绝EXECUTE IMMEDIATE,因为我想绑定命名变量并且不依赖它们在语句中的顺序。
问题是我无法处理传递给我的过程的olist ref 游标参数的游标号。这是我正在尝试做的示例代码 sn-p。
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参数,不是吗? -
嗨,温弗里德。不,它是书面的。我正在使用 ODP.Net 调用该过程,根据文档,它应该是 OUT。见here