2017-04-18 81 views
0

我想从表中添加我的数据PLSQL阵列=>表的表。 我的表看起来像这样:PLSQL IS返回0

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

回答

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 
+0

THX你。有用!!我只是忘了选择。但是当我这样做时,它仍然不能工作,因为我“批量收集”。 当我想你时呢?我想,我只需要选择所有的数据。 –

+0

这不是很清楚。请编辑这个问题,发布你已经完成的任务和错误 – Aleksej

+0

在我的脚本中,我忘记了选择数据。但是当我不会忘记这一点的时候,我还没有使用“批量收集”表达。我只使用“select * from table * 当我应该使用这个表达式”批量收集“? –