gpt4 book ai didi

sql - 在 Oracle 中执行大型查询并返回行

转载 作者:行者123 更新时间:2023-12-02 00:27:42 26 4
gpt4 key购买 nike

我有一个函数接收查询作为参数(作为 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

有什么建议吗?

最佳答案

这是来自 Oracle 文档的示例。基本上你需要 dbms_sql.fetch_rowsdbms_sql.column_value:

CREATE TABLE multi_tab (num NUMBER, 
dat1 DATE,
var VARCHAR2(24),
dat2 DATE)

declare
c NUMBER;
d NUMBER;
n_tab DBMS_SQL.NUMBER_TABLE;
d_tab1 DBMS_SQL.DATE_TABLE;
v_tab DBMS_SQL.VARCHAR2_TABLE;
d_tab2 DBMS_SQL.DATE_TABLE;
indx NUMBER := 10;
BEGIN

c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'select * from multi_tab order by 1', DBMS_SQL.NATIVE);

DBMS_SQL.DEFINE_ARRAY(c, 1, n_tab, 5, indx);
DBMS_SQL.DEFINE_ARRAY(c, 2, d_tab1, 5, indx);
DBMS_SQL.DEFINE_ARRAY(c, 3, v_tab, 5, indx);
DBMS_SQL.DEFINE_ARRAY(c, 4, d_tab2, 5, indx);

d := DBMS_SQL.EXECUTE(c);

loop
d := DBMS_SQL.FETCH_ROWS(c);

DBMS_SQL.COLUMN_VALUE(c, 1, n_tab);
DBMS_SQL.COLUMN_VALUE(c, 2, d_tab1);
DBMS_SQL.COLUMN_VALUE(c, 3, v_tab);
DBMS_SQL.COLUMN_VALUE(c, 4, d_tab2);

EXIT WHEN d != 5;
END LOOP;

DBMS_SQL.CLOSE_CURSOR(c);

关于sql - 在 Oracle 中执行大型查询并返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com