【发布时间】:2018-08-14 05:34:42
【问题描述】:
我正在使用 C# 开发一个大型解决方案。此解决方案使用不同的 oracle 数据库并在 TFS 中签入。实际上,我开发了一个小型库,可以将解决方案中的 SQL 脚本部署到使用的数据库。应用程序的部署由 TFS 处理,将来我的工具应该包含在构建过程中。对于 Oracle 连接,我使用 Oracle.ManagedDataAccess.Client 执行语句。
如果 SQL 文件中只有几个 DDL 或 DML 语句,则第一个测试成功。但是有一些特殊的事情我必须处理,比如 SET DEFINE OFF。这不是真正的 SQL 语句,如果我使用 ORacle SQL*PLus 运行脚本,则没有问题。一开始我尝试执行整个脚本,但这不起作用,因为我的应用程序将多条语句放在一行中,我找到的唯一解决方案是拆分文件和单次执行。
例子:
/*************************************************************************************************************************
##NAME ScriptName.sql
##DESCR ScriptDescription
*************************************************************************************************************************/
Create table tmp_thm_Test
( tmp_thm_Test_id number(8)
, text varchar2(200));
Create table tmp_thm_Test2
( tmp_thm_Test2_id number(8)
, text varchar2(200));
这是脚本的示例内容。也可以有插入(在字符串中有 & 时需要设置定义关闭),更新语句。还有开始/结束脚本。
如果只有 DDL 和 DML 语句,我可以拆分它们,但 Begin/End 部分不可拆分。一开始我以为我可以像过去一样使用 SQL*Plus (@Scriptname.sql) 部署脚本。阅读整个脚本并执行它。
有什么想法吗?
【问题讨论】:
-
您的要求并不完全清楚。您能否提供您尝试过的代码(简化为minimal, complete and verifiable example),描述您期望发生的事情以及实际发生的事情? SET DEFINE OFF 是 SQL*Plus 的设置,而不是 Oracle DB 服务器的设置。你不应该在通过 ODP.Net 执行的脚本中使用它
-
嗨 jeroenh,我已经用其他信息编辑了我的帖子。
标签: c# oracle tfs deployment