Как я могу вызвать функцию оракула как часть параметризованного запроса? - PullRequest
1 голос
/ 19 ноября 2010

У меня есть несколько автоматически сгенерированных классов доступа к данным для обработки таких вещей, как вставки и обновления.

Они выглядят так:

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 против oracle 11.

1 Ответ

0 голосов
/ 19 ноября 2010

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

Вы можете рассмотреть триггер на базовой таблице, который заполняет 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;
/
...