在 Oracle 中执行大型查询并返回行
我有一个函数,它接收查询作为参数(作为 clob 类型)并“选择”该查询的行以返回。我需要使用 dbms_sql,因为查询的大小大于 32kb (~150kb)。
我陷入了获取结果的困境:
-- execute immediate style (does not work with clob):
EXECUTE IMMEDIATE large_query BULK COLLECT INTO V_TAB ;
-- dbms_sql style:
v_upperbound := CEIL(DBMS_LOB.GETLENGTH(large_query)/256);
FOR i IN 1..v_upperbound
LOOP
v_sql(i) := DBMS_LOB.SUBSTR(large_query,256,((i-1)*256)+1);
END LOOP;
v_cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(v_cur, v_sql, 1, v_upperbound, FALSE, DBMS_SQL.NATIVE);
v_ret := DBMS_SQL.EXECUTE(v_cur);
-- NOW WHAT??
我使用的是 Oracle 9i/10g,因此无法使用dbms_slq.to_refcursor
。
有什么建议吗?
I have a function that receives a query as parameter (as clob type) and 'selects' this query's rows for returning. I need to use dbms_sql
, because the query's size is larger than 32kb (~150kb).
I'm stuck at point of fetching into result:
-- execute immediate style (does not work with clob):
EXECUTE IMMEDIATE large_query BULK COLLECT INTO V_TAB ;
-- dbms_sql style:
v_upperbound := CEIL(DBMS_LOB.GETLENGTH(large_query)/256);
FOR i IN 1..v_upperbound
LOOP
v_sql(i) := DBMS_LOB.SUBSTR(large_query,256,((i-1)*256)+1);
END LOOP;
v_cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(v_cur, v_sql, 1, v_upperbound, FALSE, DBMS_SQL.NATIVE);
v_ret := DBMS_SQL.EXECUTE(v_cur);
-- NOW WHAT??
I'm in Oracle 9i/10g, so I can't use dbms_slq.to_refcursor
.
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是 Oracle 文档中的一个示例。基本上你需要 dbms_sql.fetch_rows 和 dbms_sql.column_value :
Here's an example from the Oracle docs. Basically you need
dbms_sql.fetch_rows
anddbms_sql.column_value
:这就是我根据答案所做的:
Thats what I did based on the answer: