我正在尝试将数据从“ CSV”文件显示到Oracle表单。我正在使用Client_Text_IO过程从逗号分隔为“数据块”的“ CSV”文件中读取数据。
我有一列,其中一些数据为空,并且有一些数据。如果我在excel中打开文件,则:
否。 6列,有些行为空:
第6列某些行包含数据:
当我在记事本中打开文件时:
6,6,6000000116,HH00000471,Abdul akbar,,1610223056753
由于空数据,您可以在“ ABDUL AKBAR”后面看到两个逗号
记事本中包含数据:
6,6,6000000189,HH00000544,Raishma bibi,Gul akbar,1610216789294
当我运行过程时,在第6列出现以下错误:
代码:
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;
答案 0 :(得分:1)
因为它是空的,所以计数无效。 使用拆分功能拆分数据。 Split function
此外,在您的no_data_found异常时,您应该在消息后加上pause;
,然后就不必重复两次。