代码之家  ›  专栏  ›  技术社区  ›  devdimi

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

  •  2
  • devdimi  · 技术社区  · 17 年前

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

    如果不分析和拆分脚本,ADO.NET连接/命令将无法处理此问题。

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

    我错过了什么?使用Oracle时如何执行SQL脚本?

    3 回复  |  直到 17 年前
        1
  •  2
  •   Justin Cave    17 年前

    你为什么相信SQL plus实用程序不适合批量使用?在运行这些类型的脚本时使用它是很常见的——您可以将脚本传递给SQL 另外,如果您愿意,也可以调用它。

    sqlplus scott/tiger@someDatabase @someScript.sql
    

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

    如果问题在于SQL*PLUS处理错误的方式,您可以简单地添加行

    WHENEVER SQLERROR EXIT SQL.SQLCODE
    

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

        2
  •  2
  •   Mark Brady    17 年前

    Devdimi

    我同意埃里克。

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

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

    记住,DDL在运行之前和之后执行提交。所以作为交易的一部分,这有点糟糕。

        3
  •  1
  •   erikkallen    17 年前

    我认为如果将语句包装在declare/begin/end中,就可以做到这一点。不过,我已经没有访问Oracle的权限了,所以我无法测试它。 例子:

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

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

    推荐文章