PLSQL IS TABLE OF返回0

时间:2017-04-18 09:03:43

标签: arrays plsql

我正在尝试将表中的数据添加到plsql-array =>表。 我的表看起来像这样:

CREATE TABLE "MY_DATABASE"."EMPLOYEES" 
   (    "EMPLOYEE_ID" NUMBER(6,0), 
    "FIRST_NAME" VARCHAR2(20 BYTE), 
    "LAST_NAME" VARCHAR2(25 BYTE) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE, 
    "EMAIL" VARCHAR2(25 BYTE) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE, )

现在我正在尝试将数据保存到类型"是表",但不会选择任何数据 而且我没有进入我的循环。

SET SERVEROUTPUT ON
declare

  TYPE employees_table_typ IS TABLE OF employees%ROWTYPE
          INDEX BY BINARY_INTEGER;

  employees_table employees_table_typ;

  v_index BINARY_INTEGER;

begin
    dbms_output.put_line('COUNT: '||employees_table.count);
  v_index := employees_table.first;
     dbms_output.put_line('BEFORE Loop ');
  while v_index is not NULL loop


    dbms_output.put_line('FIRST_NAME: '|| employees_table(v_index).FIRST_NAME);
    dbms_output.put_line('INDEX: ' || v_index);
    v_index := employees_table.next (v_index);

  end loop;

     dbms_output.put_line('AFTER Loop ');
end;

这可能是错的?当我计算我的记录时,我得到0.

1 个答案:

答案 0 :(得分:3)

你声明了一个变量,坚果你永远不会把任何东西放进去,所以当你检查记录的数量时它是空的。

如果要使用变量来托管某些值,则必须填充它;例如,这个

DECLARE
    TYPE employees_table_typ IS TABLE OF employees%ROWTYPE
        INDEX BY BINARY_INTEGER;

    employees_table                         employees_table_typ;
BEGIN
    DBMS_OUTPUT.put_line('BEFORE - COUNT: ' || employees_table.COUNT);
    --
    select *
    bulk collect into employees_table
    from employees;
    DBMS_OUTPUT.put_line('AFTER - COUNT: ' || employees_table.COUNT);    
END;

给出

BEFORE - COUNT: 0
AFTER - COUNT: 2

标量变量的相同之处:

declare
    v   varchar2(10);
begin
    dbms_output.put_line('before - v: ' || v);
    --
    select 'some value'
    into v
    from dual;    
    dbms_output.put_line('after - v: ' || v);
end;

给出:

before - v:
after - v: some value