簡體   English   中英

如何在 Oracle 查詢“Select-For-Update”中參數化等待時間

[英]How to parameterize waiting-time in Oracle Query "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: 缺少或無效的等待間隔

我的問題:

我必須做一個String.Format()還是我做錯了什么?

您不能對WAIT參數化,因為它需要整數文字 您可以使用字符串連接或插值來構建查詢:

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

請注意,此技術是一種解決方法(可能對用戶輸入進行 SQL 注入)。 只有在沒有其他選項並且參數不能被用戶篡改或正確清理時才應該使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM