2010-11-19 23 views
1

我有一些自動生成的數據訪問類來處理插入&更新的事​​情。如何作爲參數化查詢的一部分調用oracle函數?

這些看起來像:

cmd.CommandType = CommandType.Text 
cmd.CommandText = "UPDATE myTable set f1 = :f1, f2 = :f2, f3 = :f3 where id = :id" 

cmd.Parameters.AddWithValue(":f1", _f1) 
cmd.Parameters.AddWithValue(":f2", _f2) 
cmd.Parameters.AddWithValue(":f3", _f3) 
cmd.ExecuteNonQuery() 

如果我要重新編寫SQL做我想要的東西,它會看起來像

cmd.CommandText = "UPDATE myTable set f1 = pkg.getMyValue, f2 = :f2, f3 = :f3 where id = :id" 

是否有任何方式做到這一點將_f1設置爲「特殊」值,而不更改SQL更新或參數設置的方式?只有在某些情況下,我需要設置f1的值 - 大部分時間,它將爲空。

使用.NET 2.0,以及針對System.Data.OracleClient的甲骨文11

回答

0

不,你不能。一個綁定變量是一個文字,你不能指定一個要執行的包。

如果是空你可能會考慮與pkg.getMyValue充滿F1基礎表上的觸發器:

create or replace trigger myTrigger 
before insert or update on myTable for each row 
begin 
    if :new.f1 is null 
    then 
    :new.f1 := pkg.getMyValue; 
    end if; 
end; 
/
相關問題