0
我在通過APEX從CSV讀取數據到oracle數據庫表時遇到問題。獲取(否?)嘗試加載CSV的ASCII值。 (APEX)
我正在通過文件上傳將CSV內容傳遞給BLOB數據類型。然後迭代該BLOB的二進制文件,並將其轉換爲字符。
這是文章進出口以下內容:Uploading CSV using Oracle Application Express (APEX)
這裏是我的代碼:
DECLARE
v_blob_data BLOB;
v_blob_len NUMBER;
v_position NUMBER;
v_raw_chunk RAW(10000);
v_char CHAR(19000);
c_chunk_len NUMBER := 1;
v_line VARCHAR2 (32767) := NULL;
v_data_array wwv_flow_global.vc_arr2;
v_rows NUMBER;
v_sr_no NUMBER := 1;
BEGIN
-- Script adapted from https://nzchaudhry.wordpress.com/2011/07/18/uploading-csv-using-oracle-application-express-apex/
-- READ data FROM wwv_flow_files
SELECT blob_content
INTO v_blob_data
FROM wwv_flow_files
WHERE updated_on =
(
SELECT max(updated_on)
FROM wwv_flow_files
WHERE updated_by = :APP_USER)
AND id =
(
SELECT max(id)
FROM wwv_flow_files
WHERE updated_by = :APP_USER);
v_blob_len := dbms_lob.Getlength(v_blob_data);
v_position := 1;
-- READ AND convert binary TO CHAR
WHILE (v_position <= v_blob_len) LOOP
v_raw_chunk := dbms_lob.substr(v_blob_data,c_chunk_len,v_position);
v_char := CAST(v_raw_chunk AS CHAR);
dbms_output.put_line(Hex_to_decimal(V_RAW_CHUNK));
v_position := v_position + c_chunk_len;
END LOOP;
END;
問題的行是:dbms_output.put_line(Hex_to_decimal(V_RAW_CHUNK));
,我用它來看看爲什麼我沒有得到ASCII值。有趣的是,我得到了一些負面結果(導致其餘查詢失敗)時,有沒有負面的ASCII值...
下面是輸出的一個子集:
-17
-17
-17
73
116
101
95
32
67
95
100
101
31
66
117
115
31
32
68
97
116
謝謝,
康納
我看不到你在哪裏解釋CSV文件的字符編碼。獨立於APEX和Oracle,要讀取CSV文件,您需要知道作者用於:字符編碼,行結尾,字段分隔符,字段引用方案(文本限定符),包括文本限定符字符在部分的字段數據,如果第一行是標題或數據。而且,除非您想將所有列作爲文本,列或數據類型來推斷它們。 –