我的目标是将外部表日志文件加载到Oracle数据库中的clob列中。我一直在遇到最大大小的问题,您可以一次插入,但是如果我to_clob to_clob,我可以插入整个文件是最快,最简单的方法?):
insert into clob_insert_test values (to_clob('hfsdjhfjsdhfjksd')||chr(10)||to_clob('jhfklsdjfklsdjklfjdsjlk'));
我的问题是:我正在将文件读取到下面的shell变量中,因此我需要做的是per-pend to_clob('到该变量的每一行的开头,然后附加')|| chr(10)|| 并从变量到完成的最后一个 || chr(10)|| 。然后,我可以在clob列的SQL插入语句中使用该变量。有没有办法直接在变量上进行此操作,而不是在读取日志之前对其进行修改?
log_content=$(<"$log_file")
编辑:
对不起,我认为我不清楚。给定示例日志文件,我期望以下变量内容。
输入文件:
LOG file opened at 05/05/15 15:12:24
Field Definitions for table ext_loading
Record format DELIMITED BY NEWLINE
变量内容:
to_clob('LOG file opened at 05/05/15 15:12:24')||char(10)||to_clob('Field Definitions for table ext_loading')||char(10)||to_clob('Record format DELIMITED BY NEWLINE')
我假设您有一个文件:
this is me||chr(10)||adfasdf
asdas||chr(10)||asdfasdfasdas
,您希望它变成类似的东西:
to_clob('this is meadfasdf')||chr(10)||
to_clob('asdasasdfasdfasdas')||chr(10)||
如果是这样,您可以这样使用sed
:
sed -e "s/||chr(10)||//" -e "s/^/to_clob('/" -e "s/$/')||chr(10)||/" file
是:
- 从每行删除
||chr(10)||
一次。 - 将
to_clob('
添加到每行的开始。 - 将
')||chr(10)||
添加到每行的末端。
并将其存储在变量中:
log_content=$(sed -e "s/||chr(10)||//" -e "s/^/to_clob('/" -e "s/$/')||chr(10)||/" "$log_file")
更新
要匹配您的真正需求,您也可以做到这一点:
line=$(sed -e "/./s/^/to_clob('/" -e "/./s/$/')||chr(10)||/" "$log_file")
然后输出为:
$ echo $line # note, without quotes to have all of it together!
to_clob('LOG file opened at 05/05/15 15:12:24')||chr(10)|| to_clob('Field Definitions for table ext_loading')||chr(10)|| to_clob('Record format DELIMITED BY NEWLINE')||chr(10)||
并使用以下方式删除最后的||chr(10)||
$ echo $line | sed 's/||chr(10)||$//'
to_clob('LOG file opened at 05/05/15 15:12:24')||chr(10)|| to_clob('Field Definitions for table ext_loading')||chr(10)|| to_clob('Record format DELIMITED BY NEWLINE')