Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 当select查询不返回行时退出Unix脚本_Database_Unix_Db2_Ksh_Aix - Fatal编程技术网

Database 当select查询不返回行时退出Unix脚本

Database 当select查询不返回行时退出Unix脚本,database,unix,db2,ksh,aix,Database,Unix,Db2,Ksh,Aix,下面是我脚本的一部分。 每当任何命令发出负返回码时,“set-e”将使脚本退出 但是,当下面的select语句没有从表中返回任何行时,脚本本身就会退出(不会执行echo“Get Eg names end”)。这意味着下面的命令给出了负返回码 db2 -x "SELECT EG_NAME FROM MS.CFG_CACHE_REFRESH WHERE EG_RELOAD_UPD_BK2_TS < M_TABLE_UPD_TS AND CURRENT_TIME >= EG_RELOAD

下面是我脚本的一部分。 每当任何命令发出负返回码时,“set-e”将使脚本退出

但是,当下面的select语句没有从表中返回任何行时,脚本本身就会退出(不会执行echo“Get Eg names end”)。这意味着下面的命令给出了负返回码

db2 -x "SELECT EG_NAME FROM MS.CFG_CACHE_REFRESH WHERE 
EG_RELOAD_UPD_BK2_TS < M_TABLE_UPD_TS AND CURRENT_TIME >= EG_RELOAD_START_TIME AND
CURRENT_TIME <= EG_RELOAD_END_TIME" 
> /home/DummyUser/gm4/logs/MP_CACHE_REFRESH_TEMP_BK2.txt
db2-x“从MS.CFG\u CACHE\u刷新中选择EG\u名称
例如重新加载UPD BK2\U TS=例如重新加载开始时间和

CURRENT_TIME=EG_RELOAD_START_TIME和CURRENT_TIME问题不是负返回码,而是任何返回码!=0。DB2退出时带有:

- 0, success
- 1, no row found
- 2, warning (for example using existing index instead of creating a new one)
- 4, error (for example object not found)
- 8, system error (os related)
除非包装db2并为$?-lt 4返回0,否则我看不出您将如何成功

编辑:在单独的文件中使用sql STMT进行替换

将所有sql保存在一个单独的文件中(比如myfile.sql),您可以从sh执行以下操作:

db2 -l myfile.log +c -s -tf myfile.sql
rc=$?
if [ $rc -ge 4 ]; then
    echo "Error"
    db2 rollback
    exit 1
elif [ $rc -ge 1 ]; then
    echo "Warning"
fi

db2 commit
exit 0

-s在出现错误时终止执行(-ge 4)。您可以通过跟踪日志文件tail-10 myfile.log来找出问题的原因。请注意,某些操作(如reorg)将提交正在进行的事务。

问题不是负返回码,而是任何返回码!=0。DB2退出时带有:

- 0, success
- 1, no row found
- 2, warning (for example using existing index instead of creating a new one)
- 4, error (for example object not found)
- 8, system error (os related)
除非包装db2并为$?-lt 4返回0,否则我看不出您将如何成功

编辑:在单独的文件中使用sql STMT进行替换

将所有sql保存在一个单独的文件中(比如myfile.sql),您可以从sh执行以下操作:

db2 -l myfile.log +c -s -tf myfile.sql
rc=$?
if [ $rc -ge 4 ]; then
    echo "Error"
    db2 rollback
    exit 1
elif [ $rc -ge 1 ]; then
    echo "Warning"
fi

db2 commit
exit 0

-s在出现错误时终止执行(-ge 4)。您可以通过跟踪日志文件tail-10 myfile.log来找出问题的原因。请注意,某些操作(如reorg)将提交正在进行的事务。

问题不是负返回码,而是任何返回码!=0。DB2退出时带有:

- 0, success
- 1, no row found
- 2, warning (for example using existing index instead of creating a new one)
- 4, error (for example object not found)
- 8, system error (os related)
除非包装db2并为$?-lt 4返回0,否则我看不出您将如何成功

编辑:在单独的文件中使用sql STMT进行替换

将所有sql保存在一个单独的文件中(比如myfile.sql),您可以从sh执行以下操作:

db2 -l myfile.log +c -s -tf myfile.sql
rc=$?
if [ $rc -ge 4 ]; then
    echo "Error"
    db2 rollback
    exit 1
elif [ $rc -ge 1 ]; then
    echo "Warning"
fi

db2 commit
exit 0

-s在出现错误时终止执行(-ge 4)。您可以通过跟踪日志文件tail-10 myfile.log来找出问题的原因。请注意,某些操作(如reorg)将提交正在进行的事务。

问题不是负返回码,而是任何返回码!=0。DB2退出时带有:

- 0, success
- 1, no row found
- 2, warning (for example using existing index instead of creating a new one)
- 4, error (for example object not found)
- 8, system error (os related)
除非包装db2并为$?-lt 4返回0,否则我看不出您将如何成功

编辑:在单独的文件中使用sql STMT进行替换

将所有sql保存在一个单独的文件中(比如myfile.sql),您可以从sh执行以下操作:

db2 -l myfile.log +c -s -tf myfile.sql
rc=$?
if [ $rc -ge 4 ]; then
    echo "Error"
    db2 rollback
    exit 1
elif [ $rc -ge 1 ]; then
    echo "Warning"
fi

db2 commit
exit 0

-s在出现错误时终止执行(-ge 4)。您可以通过跟踪日志文件tail-10 myfile.log来找出问题的原因。请注意,某些操作(如reorg)将提交正在进行的事务。

我认为最好不要使用
set-e
,而是明确检查退出代码($?)您感兴趣的命令的名称in@IngoLeonhardt感谢您的回复。实际上上面是完整脚本的一小部分,在我们认为可能引发错误的每个命令之后检查返回代码实际上会更耗时。我正在寻找一种使用set-e的方法。我真的无法想象(通常是内置的)与数据库访问相比,test命令可能会有任何重要的性能问题。此外,明确检查退出代码会让您可以自由打印错误消息等,因为“将非常耗时”“我说的是开发时间,而不是脚本的性能。我只是想在脚本中不做太多更改的情况下实现。我认为最好不要使用
set-e
,而是明确检查您感兴趣的命令的退出代码($?)in@IngoLeonhardt谢谢你的回复。实际上,上面是整个脚本的一小部分,在我们认为可以抛出错误的每个命令之后检查返回代码实际上会花费更多的时间。我正在寻找一种使用set-e的方法。我真的无法想象(通常是内置的)test命令与数据库访问相比会有任何重要的性能问题。此外,明确地检查退出代码可以让您自由地打印错误消息等。通过“将非常耗时”,我说的是开发时间,而不是脚本的性能。我只是想在脚本中不做太多更改的情况下实现。我认为最好不要使用
set-e
,而是明确检查您感兴趣的命令的退出代码($?)in@IngoLeonhardt谢谢你的回复。实际上,上面是整个脚本的一小部分,在我们认为可以抛出错误的每个命令之后检查返回代码实际上会花费更多的时间。我正在寻找一种使用set-e的方法。我真的无法想象(通常是内置的)test命令与数据库访问相比会有任何重要的性能问题。此外,明确地检查退出代码可以让您自由地打印错误消息等。通过“将非常耗时”,我说的是开发时间,而不是脚本的性能。我只是想在脚本中不做太多更改的情况下实现。我认为最好不要使用
set-e
,而是明确检查您感兴趣的命令的退出代码($?)in@IngoLeonhardt谢谢你的回复。实际上,上面是整个脚本的一小部分,在我们认为可以抛出错误的每个命令之后检查返回代码实际上会花费更多的时间。我正在寻找一种使用set-e的方法。我真的无法想象(通常是内置的)test命令会有任何重要的性能问题