如何在Oracle查询“选择更新”中参数化等待时间

时间:2019-01-23 08:13:39

标签: c# oracle parameters odp.net

在我的程序中,我运行“选择更新”-这样的查询:

   UPDATE     
   tabel2 tb2,
    (select tabel1.no, GROUP_CONCAT(tabel1.code) as 'data' from tabel1 group by tabel1.no) as data
SET 
    tb2.codeall = data.data
WHERE
    tb2.no = 1 and data.no = tb2.no

这很好。现在,我想参数化等待获取锁的时间(由于测试环境较慢,有些集成测试将等待更长的时间)。

因为这个,我尝试了这个:

<form id="PDP_Form" data-bind = "submit : $data.handleAddToCart">

不幸的是,我得到了:

  

ORA-30005:缺少或无效的等待间隔

我的问题:

我必须做OracleConnection con = GenerateConnection(); OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "SELECT col1 FROM table1 WHERE col2 = :COL2 AND rownum = 1 FOR UPDATE WAIT 2"; cmd.Parameters.Add(new OracleParameter(":COL2 ", "some value")); string myValue = Convert.ToString(cmd.ExecuteScalar()); 还是我做错什么了?

1 个答案:

答案 0 :(得分:1)

您无法参数化WAIT,因为它需要整数文字。您可以使用字符串串联或插值来构建查询:

int waitfor = 2;
cmd.CommandText = $"SELECT col1 FROM table1 WHERE col2 = :COL2 AND rownum = 1 FOR UPDATE WAIT {waitfor}";

请注意,此技术是解决方法(用户可以输入SQL注入)。仅当没有其他选项并且用户无法篡改参数或对其进行适当清理时,才应使用它。