Oracle 将光标提取到数组中
我有一个带有数值的表,我想把这些值提取到一个数组中。我可以这样做吗?是否有一个函数允许我这样做?我对pl/sql比较陌生,我不知道。谢谢 假设您的表是您的_表,列是您的_列,您可以使用如下数组:Oracle 将光标提取到数组中,oracle,plsql,Oracle,Plsql,我有一个带有数值的表,我想把这些值提取到一个数组中。我可以这样做吗?是否有一个函数允许我这样做?我对pl/sql比较陌生,我不知道。谢谢 假设您的表是您的_表,列是您的_列,您可以使用如下数组: DECLARE TYPE t_ARR IS VARRRAY(1000000) OF NUMBER; varr_col T_ARR; BEGIN varr_col := t_ARR(); FOR i IN (SELECT YOUR_COLUMN FRO
DECLARE
TYPE t_ARR IS VARRRAY(1000000) OF NUMBER;
varr_col T_ARR;
BEGIN
varr_col := t_ARR();
FOR i IN (SELECT YOUR_COLUMN
FROM YOUR_TABLE)
LOOP
varr_col.EXTEND;
varr_col (i) := i.YOUR_COLUMN;
END LOOP;
EXCEPTION
---
END;
这将创建可变大小的数组。对于FOR循环的每次迭代,它都会将数组扩展一次并插入值。所以,就特定列的行数而言,它是灵活的。是的,您可以使用循环方法,但我更喜欢批量收集到 下面是我的小例子:
SET SERVEROUTPUT ON
SET FEEDBACK OFF
CLEAR
DECLARE
TYPE TT_ARR IS TABLE OF NUMBER;
V_NUM_ARR TT_ARR;
BEGIN
V_NUM_ARR := TT_ARR(); --<-- explicit initializing
-- LOOP approach:
FOR L_I IN (SELECT 1 + ROUND(DBMS_RANDOM.VALUE() * 10) COL_1
FROM DUAL
CONNECT BY LEVEL < 20) LOOP
V_NUM_ARR.EXTEND;
V_NUM_ARR(V_NUM_ARR.LAST) := L_I.COL_1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Collection size : ' || TO_CHAR(V_NUM_ARR.COUNT));
-- BULK COLLECT INTO approach (preferred)
SELECT 1 + ROUND(DBMS_RANDOM.VALUE() * 10) COL_1 BULK COLLECT
INTO V_NUM_ARR
FROM DUAL
CONNECT BY LEVEL < 20;
DBMS_OUTPUT.PUT_LINE('Collection size : ' || TO_CHAR(V_NUM_ARR.COUNT));
END;
/
我还有一个问题。我试图在我拥有的一个程序上使用这段代码,但我得到一个错误,varr_col未初始化。如何初始化它?@katy是的,缺少初始化行。我加了它。@Hawk你不是说varr\u col I:=I.YOUR\u列;而不是varr_col 1:=i.YOUR_列@如果是的,谢谢你的更正。。。更新
set serveroutput on;
DECLARE
TYPE v_arr IS VARRAY(100) OF NUMBER;
var v_arr;
return_value number;
BEGIN
var:=v_arr();
FOR c1 IN (SELECT ID FROM table_name WHERE ROWNUM<100)
loop
var.EXTEND;
var(var.last):=c1.id;
end loop;
FOR i IN var.FIRST..var.LAST
loop
return_value:=var(i);
dbms_output.put_line(return_value);
end loop;
end;