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

时间:2015-03-26 08:21:57

标签: oracle bash cygwin

我想从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中被转换为raw。

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

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

btw。:bash在cygwin中运行。

1 个答案:

答案 0 :(得分:0)

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

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

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