如何从包含特殊字符的 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 换行符。
我想从 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 换行符。