在一个命令中执行许多db2命令

时间:2019-10-01 13:56:15

标签: db2 db2-luw

我可以在一个命令中运行多个db2命令吗? 即:来自cmd:

db2cmd /c db2 /c connect to sample user sample_user using sample_pwd /c 
"SELECT * FROM table;"

我还尝试了以下方法:

db2 connect to sample user db2admin using pwd; EXPORT TO result.csv OF DEL 
MODIFIED BY NOCHARDEL SELECT * FROM alarms;

但不适用于以下错误:

  

SQL0104N在以下位置发现意外的标记“ EXPORT”   “”。预期的令牌可能包括:“ NEW”。 SQLSTATE = 42601

例如,对于vERTICA VERTICA工具,可以通过以下方式完成此操作:

vsql -h localhost -U user -w pwd -c "SELECT * FROM alarms" -A -o 
"alarms.csv" -F "|" -P footer=off -q

3 个答案:

答案 0 :(得分:2)

您似乎正在使用Microsoft Windows db2cmd.exe。

您的问题与Db2本身无关,而是更多关于CMD(cmd.exe)脚本语法,这是Microsoft用于批处理文件的旧脚本语言,该语言仍可在Windows-10上使用,并且也可以在db2cmd.exe中使用。

在db2cmd.exe Shell中,可以在不同的Db2命令之间使用“ &&”序列(每个这样的命令必须具有db2前缀)。另外,每个这样的命令行都必须将特殊字符的任何字符转义到shell本身。默认情况下,转义字符是插入符号(^)。

例如db2 connect to dbname && db2 ^"export to alarms.csv of del ... select ^* from alarms^" && db2 connect reset

(我会在您可能要传递给Db2-CLP的任何“之前显示^。

但是&&将要求每个命令返回零退出代码,尽管通常这是最安全的选择,但这可能不是您想要的。如果先前的命令失败,则后续的命令将不会运行。

如果要容忍一些非零的退出代码,请使用括号( ... )对命令进行分组,然后根据需要在括号之外使用&&&。您可以在任何一本好书中阅读有关CMD脚本的信息,在线上有大量示例。

但是,在Windows上为Db2编写脚本时,将所有命令(不带Db2前缀)附加到纯文本文件中,然后要求Db2 clp通过语法{ {1}}。通过这种方式,您可以在文本文件内添加条件逻辑,处理异常,避免外壳转义要求等。如果将所有逻辑封装在脚本内,则将使其更易于测试,并且也可以从单个{{ 1}}命令行。

如果您要制作不需要调用db2 -tvf texfile前缀的批处理文件(* .bat或* .cmd),则可以将批处理文件更改为在开始时有几行批处理文件以通过db2cmd /c ....重新执行。如果您的db2cmd已经在db2cmd.exe环境变量中,那么效果更好,但是如果不是这样,则可以在批处理文件中完全限定db2cmd.exe的绝对路径名。在批处理文件的开头添加的行是:

PATH

此外,在Windows上,您可以使用Powershell脚本来操纵Db2数据库,还可以使用Windows子系统的Unix在某些配置下运行Unix风格的shell脚本。

答案 1 :(得分:0)

您的示例在Db2-land中最直接的比较是clpplus,它使您可以指定数据库,但还必须提供登录信息(包括密码,否则可能会提示您输入密码)。

db2cmddb2框架中,您有两个选择,但很可能会使用脚本文件。

一个选项:将注册表变量DB2DBDFT设置为默认数据库。就我个人而言,我不喜欢该选项,因为它会导致隐式连接到您可能不需要的数据库。

一个选项:将一系列命令放入文件中并运行该文件。这是运行多个命令的更传统的方式。可以使用分号和换行符来终止命令(此处理解DOS和Unix的区别)。您可以通过使用-td @(例如)来使用其他终止符。然后,您将调用db2 -tf file.sql

一个选项:批处理文件。与上面的类似,但是您将使用db2cmd环境执行其中包含db2命令的批处理。 db2cmd为您提供了使用Db2的合适环境。如果在此环境中连接到数据库,则您将保持连接状态,直到发出CONNECT RESETTERMINATE,被强制断开连接或环境退出为止。因此,您的批处理文件将仅具有:

db2 connect to sample user db2admin using pwd
db2 "EXPORT TO result.csv OF DEL MODIFIED BY NOCHARDEL SELECT * FROM alarms"

(请注意引号,以防止命令行替换*所在的当前工作目录中的所有文件名)

答案 2 :(得分:0)

两个选项。

1st:

db2cmd /i /w /c "db2 ^"connect to sample^" & db2 ^"values 1^" & db2 connect reset"

2nd:
您可以将以下Windows系统环境变量DB2CLP设置为值**$$**,然后像下面这样直接从Windows cmd运行db2命令:

db2 "connect to sample" & db2 "values 1" & db2 connect reset