Unix环境DB2 CLP能否实现主脚本调用其他SQL脚本功能
DB2 CLP 嵌套调用SQL脚本的实现方案
DB2 CLP原生支持在主SQL脚本内调用其他子SQL脚本,完全可以实现和Oracle @@语法等效的效果,不需要依赖bash等外部shell脚本。
常用实现方式
方式1:使用CLP内置READ命令(最接近Oracle @@的用法)
READ是DB2 CLP原生提供的读取并执行外部SQL文件的指令,用法和Oracle的@@几乎一致,不需要额外调用其他进程。
主脚本main.sql示例:
-- 先连接数据库(根据你的实际情况调整连接参数) CONNECT TO sample_db USER db_user USING db_password; -- 执行第一个子脚本 READ script1.sql; -- 执行指定路径下的第二个子脚本 READ ./sub_dir/script2.sql; -- 后续主脚本逻辑 COMMIT; CONNECT RESET;
运行主脚本的命令和普通单脚本执行完全一致:db2 -tf main.sql
方式2:使用CLP外部命令调用语法
如果你需要给子脚本单独指定执行参数(比如自定义语句终止符、设置编码等),可以用CLP的!前缀执行本地db2命令:
-- 子脚本使用@作为语句终止符,单独指定参数执行 !db2 -td@ -f script3.sql;
注意事项
- 子脚本的相对路径默认相对于执行主脚本时的当前工作目录,而非主脚本本身的存储目录。如果需要固定路径基准,建议子脚本写绝对路径,或者执行主脚本前先切换到主脚本所在目录。
- 如果要求主脚本遇到子脚本执行错误时立刻终止,可以在执行主脚本时添加
-s参数:db2 -stf main.sql - 两种方式都是DB2 CLP原生能力,不需要依赖任何shell脚本逻辑,完全符合使用要求。
内容的提问来源于stack exchange,提问作者Elmo N'diaye
相关产品推荐
相关产品推荐

