2010-11-19 3 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 - большую часть времени это будет null.

Использование .NET 2.0 и System.Data.OracleClient против оракула 11.

ответ

0

Нет, вы не можете. Переменная bind является литералом, вы не можете указать пакет для выполнения.

Вы могли бы рассмотреть триггер базовой таблицы, которая заполняет f1 с pkg.getMyValue, если она равна нулю:

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; 
/