如何使用.NET执行多个Oracle SQL语句

时间:2009-02-09 15:42:35

标签: .net sql oracle

作为构建过程的一部分,我们希望针对新的数据库实例执行由DDL和DML语句组成的SQL Scripts。

如果不解析和拆分脚本,ADO.NET Connection / Command无法处理此问题。

sqlplus命令行实用程序只能以交互方式执行脚本,不适合批量使用。

我错过了什么?如何在使用oracle时执行sql脚本?

3 个答案:

答案 0 :(得分:2)

为什么您认为SQL Plus实用程序不适合批量使用?使用它来运行这些类型的脚本是很常见的 - 如果您愿意,可以在调用它时将脚本传递给SQL Plus,即

sqlplus scott/tiger@someDatabase @someScript.sql

这是部署构建的一种非常常见的方式。

如果问题与SQL * Plus处理错误的方式有关,您只需添加行

即可
WHENEVER SQLERROR EXIT SQL.SQLCODE

中止并抛出遇到的Oracle错误号。 WHENEVER SQLERROR command的文档也提供了许多其他选项。

答案 1 :(得分:2)

Devdimi,

我同意Erik K.

是的,您可以在匿名块中包含DDL。

DECLARE
BEGIN
     EXECUTE IMMEDIATE 'TRUNCATE TABLE foo';
END;

记住DDL在运行之前及之后进行提交。因此,作为交易的一部分,它有点糟糕。

答案 2 :(得分:1)

如果您将语句包装在DECLARE / BEGIN / END中,我认为您可以这样做。我不再访问Oracle了,所以我无法测试它。 例如:

DECLARE
BEGIN
    INSERT INTO ...;
    UPDATE something ...;
END;

由于您要执行DDL,请使用EXECUTE IMMEDIATE