【问题标题】:Multiple delete statement in single query单个查询中的多个删除语句
【发布时间】:2017-10-24 10:52:01
【问题描述】:

我正在尝试执行以下功能。但是我收到错误,因为命令没有正确结束。但是当我在数据库中执行时,它正在正确执行:

 string sql = @"Delete FROM table1  WHERE idtest in (Select istest from table12 Where case_id=:caseID); 
                           Delete from table12 Where case_id=:caseID ;
                           Delete from table13 Where case_id=:caseID ;
                           Delete from table14 Where case_id=:caseID ;
                           Delete from table15 Where case_id=:caseID ;
                           ";

            using (OracleConnection Conn = new OracleConnection())
            {
                try
                {
                    oh.InitOraConn(Conn);
                    using (OracleCommand cmd = new OracleCommand("", Conn))
                    {
                        cmd.Connection = Conn;
                        cmd.CommandText = sql;
                        cmd.Parameters.Add("caseID", caseId);
                        cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception Ex)
                {
                    throw Ex;
                }
            }

所以请指导一下其中有什么问题?

【问题讨论】:

  • 也许this answer 会有所帮助。
  • 如果我错了,请纠正我,但是您可以将所有 SQL 包装在 PL/SQL 块中吗?

标签: oracle ado.net


【解决方案1】:
  • 只能执行单个 SQL 命令
  • ; 不是必需的

像这样:

        using (OracleConnection Conn = new OracleConnection())
        {
            try
            {
                oh.InitOraConn(Conn);
                using (OracleCommand cmd = new OracleCommand("", Conn))
                {
                    cmd.Connection = Conn;
                    cmd.CommandText = @"Delete FROM table1  WHERE idtest in (Select istest from table12 Where case_id=:caseID)";
                    cmd.Parameters.Add("caseID", caseId);
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = @"Delete from table12 Where case_id=:caseID ";
                    cmd.Parameters.Add("caseID", caseId);
                    cmd.ExecuteNonQuery();
                    ... and so on

                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
        }

如果您想要具有更多表和更多逻辑的事务性东西,那么您可以考虑在数据库中构建一个存储过程并使用您的参数调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 2021-06-25
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    相关资源
    最近更新 更多