gpt4 book ai didi

c# - 如何在 Oracle 查询 "Select-For-Update"中参数化等待时间

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:14 25 4
gpt4 key购买 nike

在我的程序中,我运行了一个“select for update”——这样的查询:

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());

这很好用。现在我想参数化等待获得锁的时间(一些集成测试应该等待更长的时间,因为测试环境较慢)。

正因为如此,我尝试了这个:

OracleConnection con = GenerateConnection();

OracleCommand cmd = con.CreateCommand();

cmd.CommandText = "SELECT col1 FROM table1 WHERE col2 = :COL2 AND rownum = 1 FOR UPDATE WAIT :WAITFOR";
cmd.Parameters.Add(new OracleParameter(":COL2 ", "some value"));
cmd.Parameters.Add(new OracleParameter(":WAITFOR", 2));

string myValue = Convert.ToString(cmd.ExecuteScalar());

不幸的是我得到了这个:

ORA-30005: missing or invalid WAIT interval

我的问题:

我必须执行 String.Format() 还是我做错了什么?

最佳答案

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

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

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

关于c# - 如何在 Oracle 查询 "Select-For-Update"中参数化等待时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54322651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com