我有一个遇到DBMS_SQL.to_refcursor
的同事,这对他来说是一个很好的解决方案,可以传回他需要的refcursor,但是我们运行的是Oracle 10g,这个功能只能在11g中使用。
在Oracle 10g中是否容易相当于此?
我们开发了另一种编码解决方案的方法,但是在DBMS_SQL中使用绑定变量会更容易,但是我们不希望这个包变得过于难以管理,因为它会被传递给其他程序员要维护。
答案 0 :(得分:0)
此link lists the various dynamic SQL alternatives available,包括DBMS_SQL.to_refcursor
。我大多倾向于使用OPEN ... FOR
符号:
L_CURSOR SYS_REFCURSOR;
L_QUERY VARCHAR2(5000) DEFAULT '...'
BEGIN
FOR I IN 0 .. (TRUNC(LENGTH(L_QUERY) / 255)) LOOP
DBMS_OUTPUT.PUT_LINE(SUBSTR(L_QUERY, I * 255 + 1, 255));
END LOOP;
OPEN L_CURSOR FOR L_QUERY;
RETURN L_CURSOR;
END;
更新
不幸的是,在我的情况下,这不起作用,因为我绑定了不同数量的变量。这就是我使用DBMS_SQL包以编程方式绑定变量而不是使用语法的原因。
我建议在这种情况下使用context
variables - 从9i开始就支持它们。