db2 - 在一个命令中执行多个 db2 命令
问题描述
我可以在一个命令中运行多个 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”。预期的标记可能包括:“新”。SQLSTATE=42601
例如,对于 VERTICA、vsql 工具,可以这样完成:
vsql -h localhost -U user -w pwd -c "SELECT * FROM alarms" -A -o
"alarms.csv" -F "|" -P footer=off -q
解决方案
您似乎正在使用 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 执行文本文件会更明智db2 -tvf texfile
。这样做可以让您在文本文件中添加条件逻辑、处理异常、避免 shell 转义要求等。如果您将所有逻辑封装在脚本中,它会更容易测试,也更容易从单个db2cmd /c ....
命令运行 -线。
如果您想创建一个不需要db2cmd
调用前缀的批处理文件(*.bat 或 *.cmd),您可以将批处理文件更改为在批处理文件的开头有几行以重新执行自身通过db2cmd.exe
. 如果您db2cmd.exe
已经在PATH
环境变量上,这会更好,但如果不是这种情况,那么您可以完全限定db2cmd.exe
批处理文件中的绝对路径名。在批处理文件开头添加的行是:
@rem re-execute via db2cmd if running from cmd.exe
@echo off
if "%DB2CLP%"=="" db2cmd /c /i /w "%0" %* & goto :EOF
db2 connect to sample user db2admin using pwd
if errorlevel 1 @echo "Failed to connect to database " && @goto :EOF
db2 "EXPORT TO result.csv OF DEL MODIFIED BY NOCHARDEL SELECT * FROM alarms"
if errorlevel 3 @echo "Export from Db2 failed" && @goto :EOF
此外,在 Windows 上,您可以使用 Powershell 脚本来操作 Db2 数据库,还可以使用 Windows 子系统 for unix 在某些配置中运行 Unix 样式的 shell 脚本。
推荐阅读
- bash - 如何从 Jenkinsfile 加载第二个 Jenkinsfile 但继续使用原始工作区 - 多分支管道
- c# - 单击上下文菜单中的“快速操作和重构...”时,Visual Studio 2017 引发错误
- mysql - 为 Web 服务器创建 conf 文件
- sas - SAS 32 字符列名问题
- spring-security - 在我的 spring rest api 上验证后端应用程序
- java - Gridview 的 URI 列表
- php - 为 Woocommerce 变量产品的每个变体输出隐藏的输入字段
- python - 使用熊猫将数据框导出到python中的csv文件
- marklogic - MarkLogic 集群,事后
- html - 2列之间的填充,影响其他地方的填充