Oracle 将光标提取到数组中

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

我有一个带有数值的表,我想把这些值提取到一个数组中。我可以这样做吗?是否有一个函数允许我这样做?我对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 
              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;