2014-09-03 210 views
0

我有2个DB2 SQL脚本需要运行。我试图把它们放在bash脚本中并执行它们。如何在bash脚本中串行运行sql脚本?

这里是script.sh:

#!/bin/bash 
db2 -tf firstscript.sql; 
db2 -tf secondscript.sql; 

当我运行它,我得到以下错误:

DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL1024N A database connection does not exist. SQLSTATE=08003

但我确信,数据库连接已经存在。

我认为sql脚本中的命令不是按顺序执行的。 因为当我单独运行每个命令时,没有错误。 而且,当我运行内联命令即db2 -tf firstscript.sql;db2 -tf firstscript.sql时,即使这样代码也能正常工作。

我认为它可能与#!/bin/bash有关,所以我将它从script.sh文件中删除,然后执行它。即使如此,它也会返回相同的错误。

什么是可能的问题及其解决方案?

+0

如果您运行上述脚本,它将按顺序执行。如果直接输入时它们是作品,请尝试下一个:source myscript.sh'。如果它能起作用,那么问题可能在于某些bash变量,哪些不会被导出。如果不行,不知道。你运行bash作为你的命令行shell吗?什么打印'ps -p $$'命令? – jm666 2014-09-03 06:56:15

回答

0

当您建立连接时,它将保留在当前环境中。当你调用一个bash脚本时,它会创建一个子shell,并且不会有任何连接。

为了解决这个问题,就需要通过获取脚本重用当前的环境(如@ jm666说):

. ./script.sh 

确保对点随后脚本名称前添加一个空格。

db2 connect to sample 
. ./script.sh 

仅供参考,脚本中的命令将按照您的定义顺序执行。