我有两个功能 - ABC,XYZ。 ABC删除table1中的某些行作为user1,XYZ将某些用户作为DB User删除。首先我打电话给ABC,然后是XYZ。 ABC功能正在执行,但在XYZ,它失败了 - “XYZ:命令未找到”
function ABC
{
sqlplus -s $ur1/$pwd@$SID << EOF
delete from table1 where row_name = 'A1';
delete from table2 where row_name = 'A2';
exit
EOF
}
function XYZ
{
sqlplus eip_dba/eip_dba$result@${input} << eof
set timing off
set serveroutput on size 10000
set feedback off
spool xyz_$input.out
drop user usr1 cascade;
drop user usr2 cascade;
drop user usr3 cascade;
commit;
exit
eof
}
ABC
XYZ
bash-3.2$ ./db_test.sh
2 rows deleted.
2 rows deleted.
./db_test.sh: line 100: XYZ: command not found
请让我知道出了什么问题。
提前致谢。
答案 0 :(得分:4)
尝试在EOF之前删除空格
function ABC
{
sqlplus -s $ur1/$pwd@$SID << EOF
delete from table1 where row_name = 'A1';
delete from table2 where row_name = 'A2';
exit
EOF
}
我在一个示例程序中尝试了这个并修复了问题。
答案 1 :(得分:0)
here-documents的格式为:
<<WORD
here-document content ...
here-document content ...
here-document content ...
WORD
WORD
可以是您喜欢的任何标签,但结束标记必须是该行的唯一标记,之前或之后没有空格。
在您的示例函数中,您使用eof
和EOF
作为标签,您应该从它们前面删除空格字符,以便它们真正位于行的开头,如下所示:
function ABC
{
sqlplus -s $ur1/$pwd@$SID << EOF
delete from table1 where row_name = 'A1';
delete from table2 where row_name = 'A2';
exit
EOF
}
function XYZ
{
sqlplus eip_dba/eip_dba$result@${input} << eof
set timing off
# ... and so on ....
eof
}
也就是说,结尾EOF
和eof
就在行的开头,没有尾随空格。