尝试加载 CSV 获取(负数?)ASCII 值。 (顶尖)

Getting (negative?) ASCII values trying to load CSV. (APEX)

我在通过 APEX 从 CSV 读取数据到 Oracle 数据库 table 时遇到问题。

我正在通过文件上传获取 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 值。有趣的是,当没有负 ASCII 值时,我得到了一些负面结果(导致查询的其余部分失败)...

这是输出的一个子集:

-17
-17
-17
73
116
101
95
32
67
95
100
101
31
66
117
115
31
32
68
97
116

谢谢,

康纳

能够自己解决这个问题:

要在 Oracle 中将 RAW 转换为 CHAR:utl_raw.cast_to_varchar2(hextoraw(v_raw_chunk));

其中 v_raw_chunk 是十六进制数据。