我正在为一个简单的任务开发一小段ksh代码。 我需要从表中检索大约1400万行,然后使用此信息生成xml文件。我对这些信息没有任何处理,只有一些“IF”。 问题是,写文件需要大约30分钟,对我来说是不可接受的。
这是一段代码:
......
query="select field1||','||field2||' from table1"
ctl_data=`sqlplus -L -s $ORA_CONNECT @$REQUEST`
for variable in ${ctl_data}
do
VAR1 = echo ${variable} | awk -F, '{ print $1 }'
VAR2 = echo ${variable} | awk -F, '{ print $2 }'
....... write into the file ......
完成
为了加快我在文件中只写30行的事情,所以在一行上有更多东西,所以我只有30个访问文件。 它仍然很长,所以不是写作而是循环结果。
任何人都有关于如何改进它的想法?
答案 0 :(得分:2)
你可以在oracle中完成所有操作,而不是从oracle传递给ksh吗? 您可以使用以下内容将输出格式化为xml。
select xmlgen.getxml('select field1,field2 from table1') from dual;
答案 1 :(得分:1)
只需一个实例即可减少对awk的调用量。例如
query="select codtit||','||crsspt||' from table1"
.....
sqlplus -L -s $ORA_CONNECT @$REQUEST | awk -F"," 'BEGIN{
print "xml headers here..."
}
{
# generate xml here..
print "<tag1>variable 1 is "$1"</tag1>"
print "<tag2>variable 2 is "$2" and so on..</tag2>"
if ( some condition here is true ){
print "do something here"
}
}'
根据需要使用>
或>>
答案 2 :(得分:1)
您可以取消对awk的调用:
saveIFS="$IFS"
IFS=,
array=($variable)
IFS="$saveIFS"
var1=${array[0]} # or just use the array's elements in place of var1 and var2
var2=${array[1]}
答案 3 :(得分:-1)
我怀疑,这是将数据转储到xml文件的最有效方法。你可以尝试使用groovy来完成这样的任务。看看 - &gt;中的常规食谱http://groovy.codehaus.org/Convert+SQL+Result+To+XML