举例说明通过find命令使用管道符和sqlplus或者ora2pg从数据库循环取出多个表数据时,如果命令出错或者取不到数据时,能否返回非零的值给shell
时间: 2024-03-20 16:43:00 浏览: 60
假设我们需要从Oracle数据库中循环取出多个表的数据,可以使用以下命令:
```
find /path/to/tables -name '*.sql' -print0 | xargs -0 -I {} sh -c 'sqlplus -s username/password@database @{} || echo $?'
```
该命令会在 `/path/to/tables` 目录下查找所有后缀为 `.sql` 的文件,并使用 `xargs` 命令调用 `sqlplus` 命令执行这些 SQL 脚本文件。如果命令执行成功,则返回退出码为0;如果执行失败,则返回非零值,并将错误码输出到终端。
例如,如果执行某个 SQL 脚本时出现错误,例如表不存在,则会输出类似以下的错误信息,并返回非零值给shell:
```
SQL> select * from non_existent_table;
select * from non_existent_table
*
ERROR at line 1:
ORA-00942: table or view does not exist
$ echo $?
1
```
因此,通过使用 `|| echo $?` 的方式,可以让shell在命令执行失败时能够及时捕获到错误,并进行相应的处理。
相关问题
通过find命令使用管道符和sqlplus或者ora2pg从数据库循环取出多个表数据时,如果命令出错或者取不到数据时,能否返回非零的值给shell
是的,可以通过在命令末尾添加“|| echo $?”来实现。其中“||”表示如果前一个命令返回非零值,则执行后面的命令,也就是将错误码输出到终端;“echo $?”表示输出上一个命令的退出码。如果执行成功,退出码为0;如果执行失败,退出码为非零值。因此,可以通过这种方式来判断命令是否成功执行,并在出错时返回非零值给shell。
阅读全文