2017-04-18 120 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 * 當我應該使用這個表達式」批量收集「? –