sqlplus -s / as sysdba <<eof< strong="" style="word-wrap: break-word;">
@test.sql
EOF
第二个EOF前面有没有exit效果都一样。 也就是说缺省就是exit
test.sql里最后加不加commit效果都一样,exit缺省的时候就是提交(这个可以控制)
test.sql 名字如果是带空格t est.sql,怎么办?
(下面是好多sql文件进行遍历)
【1】
cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <<eof< strong="" style="word-wrap: break-word;">
@"$line"
EOF
【2】
cat database.sh
for line in `ls *sql` ;do
sqlplus -s / as sydsba <<eof< strong="" style="word-wrap: break-word;">
@"$line"
EOF
done
用while循环,而不用for in 是因为如果文件名有空格,ls *sql出来以后,line取值是按照空格或者换行符作为间隔符号,
所以一个文件名会被空格分成为2个值使用;而用while read 则是只按照换行符作为间隔符号,所以一个文件名不会被分割。这就是这两种方式的区别。
下面的sqlplus 下面执行@"line",变量line需要加双引号,防止文件名被空格分割解析
sqlplus 的两种方式对比对比:
【1】
#cat test.sql
insert into test values(sysdate);
commit;
#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <<eof< strong="" style="word-wrap: break-word;">
@"$line"
EOF
上面的exit退出动作是由EOF完成的
【2】
#cat test.sql
insert into test values(sysdate);
commit;
exit;
#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba @"$line"
上面的exit退出动作,只能在test.sql中完成。
在这种情况下如果不在test.sql中加exit,那么循环会在第一次sqlplus 执行的时候阻塞,直到被手工处理以后,才能进入到下一次循环。
参考:sqlplus @脚本 百度
@test.sql
EOF
第二个EOF前面有没有exit效果都一样。 也就是说缺省就是exit
test.sql里最后加不加commit效果都一样,exit缺省的时候就是提交(这个可以控制)
test.sql 名字如果是带空格t est.sql,怎么办?
(下面是好多sql文件进行遍历)
【1】
cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <<eof< strong="" style="word-wrap: break-word;">
@"$line"
EOF
【2】
cat database.sh
for line in `ls *sql` ;do
sqlplus -s / as sydsba <<eof< strong="" style="word-wrap: break-word;">
@"$line"
EOF
done
用while循环,而不用for in 是因为如果文件名有空格,ls *sql出来以后,line取值是按照空格或者换行符作为间隔符号,
所以一个文件名会被空格分成为2个值使用;而用while read 则是只按照换行符作为间隔符号,所以一个文件名不会被分割。这就是这两种方式的区别。
下面的sqlplus 下面执行@"line",变量line需要加双引号,防止文件名被空格分割解析
sqlplus 的两种方式对比对比:
【1】
#cat test.sql
insert into test values(sysdate);
commit;
#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <<eof< strong="" style="word-wrap: break-word;">
@"$line"
EOF
上面的exit退出动作是由EOF完成的
【2】
#cat test.sql
insert into test values(sysdate);
commit;
exit;
#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba @"$line"
上面的exit退出动作,只能在test.sql中完成。
在这种情况下如果不在test.sql中加exit,那么循环会在第一次sqlplus 执行的时候阻塞,直到被手工处理以后,才能进入到下一次循环。
参考:sqlplus @脚本 百度