将游标提取到数组中

时间:2016-03-09 06:49:07

标签: oracle plsql

我有一个包含数值的表,我想将这些值提取到数组中。我能这样做吗?是否有允许我这样做的功能?我是pl / sql的新手,我不知道。谢谢!

3 个答案:

答案 0 :(得分:2)

public class CustomControl : Control //here base class with context etc
{
    public override void Render()
    {
        using (var control = _context.Div())
        {
            input.AddAttribute(HtmlTextWriterAttribute.Content, "Div");
        }
    }
}

答案 1 :(得分:0)

假设您的表是YOUR_TABLE,并且列是YOUR_COLUMN,您可以使用VARRAY数组,如下所示:

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 (1) := i.YOUR_COLUMN;

 END LOOP;

EXCEPTION
   ---
END;

这将创建可变大小的数组。对于FOR LOOP的每次迭代,它将数组扩展一个并插入值。因此,就特定列的行数而言,它是灵活的。

答案 2 :(得分:0)

是的,你可以使用LOOP方法,但我更喜欢BULK COLLECT INTO

在我的小例子之下:

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;
/