![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать одним оператором (oracle) ? [D7]
ANB © (2006-06-09 12:49:00)Имеем хранимку :
procedure Set_Param (p_Param_Name in varchar2, p_Param_Value in varchar2) is
begin
-- Попробуем изменить
update Common$Configuration
set Param_Value = p_Param_Value
where Param_Name = lower (p_Param_Name);
if (sql%rowcount = 0)
then
-- Если параметр не найден - добавим
insert into Common$Configuration
(Param_Name, Param_Value
)
values (lower (p_Param_Name), p_Param_Value
);
end if;
end Set_Param;
Как такую конструкцию заменить одним оператором ?
Val (2006-06-09 16:59:00) [1]>Зачем при этом генерить хранимки ?
Незачем. Сергей уже говорил про блоки.
saxon (2006-06-09 16:47:00) [2]:)
Ну это то конечно! Можно тогда сюдаже добавить и тесты.
Ладно все-таки это офтоп, не будем продолжать.
С уважением!
ANB (2006-06-09 16:43:00) [3]Например, нужно сделать скрипт, который поправит базу. Зачем при этом генерить хранимки ?
saxon (2006-06-09 15:50:00) [4]Например?
ANB (2006-06-09 15:47:00) [5]
> Интересно, Вы считаете что, хранимка всегда хуже?
Она не всегда уместна.
saxon (2006-06-09 15:45:00) [6]
> ANB © (09.06.06 14:07) [8]
Незнаю что такое TOAD.
Интересно, Вы считаете что, хранимка всегда хуже?
Мне вот наоборот.
извиняюсь за офтооп.
Val (2006-06-09 15:08:00) [7]про TOAD просто убойный аргумент :)
ANB (2006-06-09 14:07:00) [8]
> Неужели Оракл не может обычным запросом выболнить несколько
> операторов
Дык это надо хранимку создавать. А в тоаде удобнее выполнять не безымяный блок, а один DML.
ЮЮ (2006-06-09 13:27:00) [9]Неужели Оракл не может обычным запросом выболнить несколько операторов, помещенных в хранимку?
Тогда МS SQL рулит!!!
Sergey13 (2006-06-09 13:26:00) [10]2[5] ANB © (09.06.06 13:21)
А раньше неименованным блоком нельзя было?
ANB (2006-06-09 13:21:00) [11]
> количество строк выросло, операторы появились непосвященным
> непонятные.
Хм. Теперь эту операцию можно не из хранимки выполнять. А обычным запросом.
ЮЮ (2006-06-09 13:19:00) [12]Рекламная акция похоже:
такая проблема, аж на форум тянет
через 15 минут - решение
>что выиграли, не подскажете? 8О
количество строк выросло, операторы появились непосвященным непонятные.
Оракл рулит !!!, одним словом
Val (2006-06-09 13:12:00) [13]что выиграли, не подскажете? 8О
ANB (2006-06-09 13:05:00) [14]
> Даже oracle, надеюсь, не додумается Insert и Update объединить
> в одном операторе :)
Додумался :
procedure Set_Param (p_Param_Name in varchar2, p_Param_Value in varchar2) is
begin
merge into Common$Configuration Cfg
using dual
on (Cfg.Param_Name = lower (p_Param_Name))
when matched then
update
set Param_Value = p_Param_Value
when not matched then
insert (Param_Name, Param_Value)
values (lower (p_Param_Name), p_Param_Value);
end Set_Param;
-- (С) Александр Просторов
Оракл рулит !!!
ЮЮ (2006-06-09 12:56:00) [15]Даже oracle, надеюсь, не додумается Insert и Update объединить в одном операторе :)
Оставить только Insert , а в Триггере Insted Of Insert (если такой имеется у oracle) подменить на Update.
P/S/ А оно это надо?