APEX経由でCSVからoracleデータベース・テーブルへのデータの読み込みに問題があります。CSVを読み込もうとしている(負の?)ASCII値です。 (APEX)
私はファイルアップロードによってCSVを取り込み、その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を取得していない午前理由を知るためにそれを使用しています値。
-17
-17
-17
73
116
101
95
32
67
95
100
101
31
66
117
115
31
32
68
97
116
:興味深いのは、ここで
が出力のサブセットです...負のASCII値が存在しない場合、私はいくつかの否定的な結果(失敗するクエリの残りの原因となる)を取得していますということです
をオラクルにCHARにRAWを変換するには:おかげで、
コナー
私は、CSVファイルの文字エンコーディングを考慮していません。 APEXとOracleとは別に、CSVファイルを読み込むには、文字エンコーディング、行末、フィールド区切り、フィールドクオリファイアスキーム(テキスト修飾子)、テキスト修飾子文字が部分的にどのように表現されているかを含むフィールド・データの最初の行がヘッダーまたはデータの場合また、すべての列をテキストとして扱う場合を除いて、列のデータ型またはそれらを推論するための規則。 –