PLSQL动态填充无界数组

时间:2014-06-03 08:55:12

标签: sql dynamic collections plsql

我试图从选择无界数组的结果中声明并填充,但我不知道这是否可能。我已经阅读了一些例子,但是无界数组(嵌套或关联)总是充满了一些具体的值。有人可以解释是否有可能以及我在哪里做错了。这是我的代码:

DECLARE
    TYPE myArray IS TABLE OF NUMBER(38,0);
    my_array myArray;
BEGIN
    SELECT RESOURCE_CALCULATE_ID
    INTO my_array
    FROM RESOURCE_CALCULATE rc
    WHERE rc.SERVICE_ID = 'some value'

    dbms_output.put_line(my_array.count);
END;

i100的建议后使用游标解决方案:

DECLARE
  CURSOR my_cursor IS
    SELECT <COLUMN>
    FROM <TABLE>
    WHERE <COLUMN> = <VALUE>;
  my_cursor_rec my_cursor%ROWTYPE;
BEGIN
  OPEN my_cursor;

  LOOP
    FETCH my_cursor INTO my_cursor_rec;
    EXIT WHEN my_cursor%NOTFOUND;

    DBMS_OUTPUT.PUT_LINE(my_cursor_rec.<COLUMN>);

    INSERT INTO TABLE
    SELECT
      <COLUMN1>,
      <COLUMN2>,
      <COLUMN3>
    FROM TABLE
    WHERE <COLUMN> IN (<LIST_OF_VALUES>)
  END LOOP;
END;

1 个答案:

答案 0 :(得分:2)

select ... from返回记录集或游标。你不能只选择......进入

尝试这样的事情

DECLARE
    TYPE myArray IS TABLE OF NUMBER(38,0);
    my_array myArray;
    cursor c1 is
    SELECT RESOURCE_CALCULATE_ID
    FROM RESOURCE_CALCULATE rc
    WHERE rc.SERVICE_ID = 'some value';
BEGIN
    open c1;    
    fetch c1 bulk collect into my_array;
    close c1;
    dbms_output.put_line(my_array.count);
END;