如何从包含特殊字符的 oracledb 导出 varchar2 并从 bash 处理它

how to export a varchar2 from oracledb containing special characters and process it from bash

我想从 oracledb 导出数据,然后使用 bash 脚本进行处理。 但是,输出可能包含特殊字符(如换行符等),这使得处理普通文件变得困难。 所以我尝试用

对相关字符串进行 base64 编码
UTL_ENCODE.base64_encode(utl_raw.cast_to_raw(...)) 

输出文件将包含如下行:

some_text|base64_encoded_string

这让我很容易处理文本文件,但是解码过程不是很好输出是乱码:

while read line
do
    name=${line%|*}
    str64=${line#*|}
    str_dec=`echo ${str64} | base64 --decode`
    echo "${name} : ${str_dec}"
done <${export_file}

这可能是因为字符串首先在 oracle 中转换为原始字符串。

那么我怎样才能正确解码字符串呢?

或者,我如何编码(保护)可以轻松解码的字符串,这也有帮助?

顺便说一句:bash 在 cygwin 中是 运行。

其实很简单... 我只需要将结果转换回 varchar2

replace(
 replace(
  utl_raw.cast_to_varchar2(
   UTL_ENCODE.base64_encode(utl_raw.cast_to_raw(...))
  ), chr(10), ''
 ), chr(13), ''
)

它解码得很好,还必须从结果中删除 cr/lf 换行符。