【问题标题】:C# - Multiple Insert Into Statements - Error = ORA-00922: missing or invalid option\nC# - 多个插入语句 - 错误 = ORA-00922: 缺少或无效选项\n
【发布时间】:2014-08-06 14:57:41
【问题描述】:

我是使用 C# 针对 Oracle 数据库进行开发的新手。我有创建大量 INSERT INTO 语句的代码,我试图通过 C# 代码传递这些语句以在 Oracle 服务器上执行。

基本上,我构建了一个将“N”个 Insert Into 语句组合在一起的字符串。然后我调用这段代码来尝试执行它们。注意 - 如果我将字符串的内容复制出来并在 SQL Developer 中执行它,它运行良好。但是,当它通过以下代码执行时,我得到 ORA-00922: missing or invalid option\n。

我尝试过包含“;”在每一行的末尾,我尝试排除“;”在每一行的末尾。

仅供参考——“替换”语句是我根据我阅读的其他帖子输入的代码行,以尝试解决问题。如果不需要它们,我无意将它们留在最终代码中。到目前为止,它们没有任何区别。

我的问题如下... 1.我需要包括“;”在每个 INSERT INTO 语句的末尾 2.有没有更好的方法来做多个 INSERT INTO 作为一个批次 3. 这个错误告诉我什么,就像我说的,如果我复制正在执行的内容并在 SQL Developer 中运行它运行良好。

另外,我正在执行 SET DEFINE OFF;在执行代码之前。

                       try
                        {
                            sHold = sBatch.Replace(Environment.NewLine, "\n");
                            sBatch = sHold;
                            sHold = sOptioins + sBatch;
                            sToExecute = sHold.Replace("\n", "");
                            sHold = sToExecute.Replace("\r", "");
                            sToExecute = sHold;
                            OracleHelper.ExecuteNonQuery(OracleConnection, CommandType.Text, sToExecute);
                        }
                        catch (Exception ex1)
                        {
                            Console.WriteLine(ex1.Message.ToString());
                        }

这是我尝试执行的 SQL 示例。这就是动态构建并传递给 Oracle 的内容。如果我将其复制并直接粘贴到 SQL Developer 中,这也可以正常工作。

设置定义关闭;插入PlyflyR.Policy_sql(PolicyID,Username,TravelsectID,PolicyName,EmailSubject,电子邮件Body,Enaped,NotifyTraveler,NotifySuperVisor,AndifyArranded,DatyUpdated,excludevips,NotifyArranger,FromAddress,PolicyTervalid,PolicyTypeID,PolicyStartDate,PolicyEnddate,EnabledDaterange,Policyowner, INCLUDETRAVELERTYPE,EMAILFOOTER,DATEFORMAT,EMAILBODYPLAIN,RECURRENCE_FREQUENCY,IS_RECURRING_POLICY,MESSAGE_TYPE) VALUES (6,'hoppe116',1,'提前购买 - 不到 7 天','提前购买不到 7 天','亲爱的旅行者,

我们的记录表明,您的即将到来的旅行(如下所述)是在您预定出发前不到 7 天出票的。我们的旅行政策建议尽可能在旅行前至少 7 天购买机票。
','Y','Y','Y','Y','Y',to_date('6/9/2008 12:00:00 AM','MM/DD/YYYY HH:MI:SS AM'),to_date('8/4/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'Y','N','travelmanager@craneco.com' ,'0 ','C',to_date('1/1/1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),to_date('1/1/1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'N','hoppe116','','','DD-Mon-YYYY','','0','0' ,'E');插入PlyflyR.Policy_sql(PolicyID,Username,TravelsectID,PolicyName,EmailSubject,电子邮件Body,Enaped,NotifyTraveler,NotifySuperVisor,AndifyArranded,DatyUpdated,excludevips,NotifyArranger,FromAddress,PolicyTervalid,PolicyTypeID,PolicyStartDate,PolicyEnddate,EnabledDaterange,Policyowner, INCLUDETRAVELERTYPE,EMAILFOOTER,DATEFORMAT,EMAILBODYPLAIN,RECURRENCE_FREQUENCY,IS_RECURRING_POLICY,MESSAGE_TYPE) VALUES (7,'hoppe116',1,'Advance Purchase - less than 7 days (Authorizer)','Advance Purchase Less than 7 days','亲爱的旅行者,

我们的记录表明,您的即将到来的旅行(如下所述)是在您预定出发时间前不到 7 天出票的。我们的旅行政策建议尽可能在旅行前至少 7 天购买机票.
','Y','Y','Y','Y','Y',to_date('6/9/2008 12:00:00 AM', 'MM/DD/YYYY HH: MI:SS AM'),to_date('8/4/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'Y','N','travelmanager@cr aneco.com','0','C',to_date('1/1/1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),to_date('1/1 /1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'N','hoppe116','','','DD-Mon-YYYY','', '0','0','E');插入PlyflyR.Policy_sql(PolicyID,Username,TravelsectID,PolicyName,EmailSubject,电子邮件Body,Enaped,NotifyTraveler,NotifySuperVisor,AndifyArranded,DatyUpdated,excludevips,NotifyArranger,FromAddress,PolicyTervalid,PolicyTypeID,PolicyStartDate,PolicyEnddate,EnabledDaterange,Policyowner, INCLUDETRAVELERTYPE,EMAILFOOTER,DATEFORMAT,EMAILBODYPLAIN,RECURRENCE_FREQUENCY,IS_RECURRING_POLICY,MESSAGE_TYPE) VALUES (8,'holmw166',1,'Airline Ticket Exchange','Airline Ticket Exchange','请注意 - 您无需回复​​此电子邮件。 ..
我们的记录表明您的机票已兑换。平均兑换机票产生的额外费用是原始机票价格的三倍。这些额外费用每年花费 Crane Co 约 540,000 美元。虽然我们了解旅行需求的变化,但请确保在购买机票之前制定好旅行计划。如果您已经开始旅行并需要提前出发,请致电 Carlson Wago nlit 代理查看备用座位是否可用。

由于以下原因之一发送此消息:
   1)  由于旅行计划发生变化,旅客换票
   2)  旅客使用一张未使用的机票进行兑换
   3)  CWT 通过自动化流程系统地处理一张未使用的机票以进行兑换
   4)  航空公司供应商航班时刻表更改导致重新签发机票 - 无需额外的兑换费用

每当换票并需要签发新机票时,都会收取额外的服务费。

将编制一份月度报告,以审查和了解所有机票换票情况,并将与BU CFO、SC 领导和旅行委员会。
','Y','Y','Y','Y','Y',to_date('6/9/2008 12:00:00 AM' , 'MM/DD/YYYY HH:MI:SS AM'),to_date('8/9/2012 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'Y' ,'N','travelmanager@craneco.com','0','C',to_date('1/1/1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM' ),to_date('1/1/1753 12:00:00 AM ', 'MM/DD/YYYY HH:MI:SS AM'),'N','hoppe116','','','DD-Mon-YYYY','','0','0', 'E');

【问题讨论】:

  • 仅供参考 -- 上述帖子 SAMPLE 中的 SQL 是一个 INSERT INTO 语句。我有代码将尝试将多个语句(例如这个语句)批处理到对 Oracle 的单个调用中。我已经为此工作了好几天,无法超越。任何帮助或建议将不胜感激。谢谢
  • 为了进一步缩小范围,我尝试仅执行以下操作。这也给了我同样的错误。这只是一个命令,甚至没有尝试插入。设置定义关闭;
  • 仅供参考——如果我执行 SELECT 或 DELETE,它会起作用,但是,如果我执行“set define off;”它给出了错误。因此,我的问题可能不一定与我的 INSERT INTO 和“设置定义关闭”语句一样多。必须执行此语句,因为正如您在我的帖子中的 SQL 示例中看到的那样,我在插入语句中有 HTML 字符,例如  当我尝试在没有设置定义的情况下执行此操作时,它不喜欢 &。
  • 您需要使用 odp.net 绑定一组值,您不能将脚本作为单个执行语句运行。您可以在循环中一次插入 1 个,或者更好的方法是绑定一个值数组。示例见here
  • 谢谢“tbone”,直到我发布答案后我才看到你的帖子。我会按照您对数组的指示进行尝试.. 谢谢..

标签: c# oracle insert


【解决方案1】:

好的.. 这个问题与 INSERT INTO 无关。我面临的问题是三个方面... 1. set define off 在代码中无效,只在 SQL Developer 内部有效 2. 删除 set define off 语句后,由于我的 SQL 语句中包含 ,我收到错误,所以我不得不解决这个问题。现在我用 [NBSP] 替换  ,然后在完成后进行更新以将其切换回数据库中的 true 。当我继续前进时,我可能会尝试使用代码中的 CHAR(38) 来解决这个问题。 3. C# oracle 命令不需要也不接受;因为它一次只会处理一个命令。我试图将几个命令一起批处理(就像我可以在 SQL Server 中轻松完成的那样),但它不允许这样做..

希望这可以帮助其他遇到此问题的人...

谢谢, 布鲁斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多