1

我有两个功能-ABC,XYZ。ABC 删除 table1 中的一些行作为 user1,XYZ 删除一些用户作为 DB 用户。首先我打电话给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

请让我知道出了什么问题。

提前致谢。

4

2 回答 2

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
}

我在一个示例程序中尝试了这个,它解决了这个问题。

于 2013-02-23T04:22:02.690 回答
0

这里文档的格式是:

    <<WORD
here-document content ...
    here-document content ...
  here-document content ...
WORD

WORD可以是你喜欢的任何标签,但结束标记必须是行上唯一的东西,前后不能有空格。

在您使用eofEOF作为标签的示例函数中,您应该从它们前面删除空格字符,以便它们真正位于行首,如下所示:

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
}

也就是说,结尾EOFeof就在行的开头,也没有尾随空格。

于 2013-02-23T07:39:33.883 回答