2014-05-11 64 views
0

我需要一個varchar轉換爲使用PL/SQL的陣列,但是當我使用SUBSTR函數,我得到這個錯誤:的Oracle PL/SQL SUBSTR錯誤

錯誤報告 - ORA-06550:行12 ,第3列: PLS-00330:無效使用類型名稱或子類型名稱 ORA-06550:第12行第3列: PL/SQL:語句被忽略 06550. 00000 - 「行%s,列%s:\ n%s「 *原因:通常是PL/SQL編譯錯誤。

這是我的代碼:

SET SERVEROUTPUT ON; 
DECLARE 
    v_string varchar2(20) := 'hello'; 
    type array_string is varray(5) of varchar2(10); 
    v_length number; 
    cnt number; 
    v_char char(1); 
BEGIN 
    v_length := length(v_string); 
    while (cnt < v_length) 
    loop 
    v_char := SUBSTR(v_string, cnt, 1); 
    array_string(cnt) := v_char; 
    cnt := cnt + 1; 
    end loop; 
END; 

當我(部分地)輸入 'SUBSTR' 它自動填充到SUBSTR(SQLERRM,1,64),因此它應該知道的命令,是嗎?

我在做什麼錯? IM在PL/SQL相當新

問候,

回答

1

您必須substr使用前初始化變量cnt
您必須在array_string(cnt)中使用變量名稱而不是類型名稱。
在寫入新值之前,您必須先寫好extend

+0

謝謝!只要我對substr有另一個錯誤,所以我不是全部在那裏,但在途中!這是現在我的代碼: 編輯:也許我應該把代碼放在一個答案在這裏,所以你可以更好地監督它 新錯誤: 下限下限 – user3626025

+0

'cnt'必須初始化爲'1'。 –

0

在Oracle環境,對於可變數組的起始索引始終爲1。

cnt從0開始所以在循環的第一次執行中,在

a_string(cnt) := v_char; 

CNT爲0 。

初始化CNT爲1,並運行

while (cnt < 5) 
環路

這將刪除您收到的錯誤

+0

thx,現在工作! – user3626025