Ошибка ORA-06502 при нажатии кнопки оракула - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь показать данные из файла "CSV" в формы Oracle.Я использую процедуру Client_Text_IO для чтения данных из файла "CSV" с запятой, разделенной на блок данных.

У меня есть один столбец, в котором некоторые данные пустые, и некоторые данные.Если я открою файл в Excel, тогда:

Нет.6 столбцов, некоторые строки пусты:

enter image description here

№ 6 столбец, в некоторых строках есть данные:

enter image description here

Когда я открываю файл в блокноте, то:

6,6,6000000116,HH00000471,Abdul akbar,,1610223056753

Вы можете увидеть после "ABDUL AKBAR" есть2 запятых из-за пустых данных

С данными в блокноте:

6,6,6000000189,HH00000544,Raishma bibi,Gul akbar,1610216789294

Когда я запускаю процедуру, я получаю следующую ошибку в 6-м столбце:

enter image description here

КОД:

PROCEDURE p_output_line(p_line varchar2) IS

 vLINE VARCHAR2(4000);
 vVALUE VARCHAR2(1000); 
 vCOMMA_COUNT NUMBER;

BEGIN

 vLINE := p_line;
 vCOMMA_COUNT := LENGTH(vLINE)- LENGTH(REPLACE(vLINE,',',''));

  FOR I IN 1.. vCOMMA_COUNT+1 LOOP  
  vVALUE := SUBSTR(vLINE,1,INSTR(vLINE,',')-1);
IF vVALUE IS NULL THEN
    vVALUE := vLINE;
END IF;    
  vLINE := SUBSTR(vLINE,INSTR(vLINE,',')+1) ; -- CHANGE   123,ABC,9877 TO BE   ABC,9877

  IF I = 1 THEN
:WE_GROUP_HOF_K.CLIENTID := vVALUE; 
 END IF;

 IF I = 2 THEN 
:WE_GROUP_HOF_K.PROJECTID := vVALUE;
 END IF;

 IF I = 3 THEN
:WE_GROUP_HOF_K.GROUP_HOF_ID := vVALUE;
 END IF;

 IF I = 4 THEN
:WE_GROUP_HOF_K.NRSP_HOFID := vVALUE;
 END IF;

 IF I = 5 THEN
:WE_GROUP_HOF_K.HOF_NAME := vVALUE;
 END IF;

 IF I = 6 THEN
    :WE_GROUP_HOF_K.FATHER_NAME := vVALUE;
 END IF;

 END LOOP; 
 EXCEPTION
  WHEN NO_DATA_FOUND THEN
  MESSAGE('Please Check the data type is appropriate on you excel file');
  MESSAGE('Please Check the data type is appropriate on you excel file');
END; 

1 Ответ

1 голос
/ 14 мая 2019

Поскольку он пуст, ваши счета не работают.Используйте функцию разделения, чтобы разделить ваши данные. Функция разделения

Также в вашем исключении no_data_found вы должны поставить pause; после своего сообщения, тогда нет необходимости ставить его дважды.

...