Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / помогите написать процедуру / 15 сообщений из 15, страница 1 из 1
12.05.2003, 15:43
    #32157664
moore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
...которая бы делала insert в таблицу, а если уже есть там запись с таким id, то делала бы update этой записи

всем спасибо заранее...
...
Рейтинг: 0 / 0
12.05.2003, 15:50
    #32157683
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
create procedure БЛА-БЛА-БЛА (new_id IN integer, ...)
numrows INTEGER;
BEGIN
SELECT COUNT (*)
INTO numrows
FROM ТАБЛИЦА
WHERE id = new_id;

IF (numrows <> 0)
THEN update ...
ELSE insert ...
END IF;
end БЛА-БЛА-БЛА;
...
Рейтинг: 0 / 0
12.05.2003, 15:57
    #32157703
moore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
спасибо, седня попробую...
...
Рейтинг: 0 / 0
12.05.2003, 20:47
    #32158030
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
Через exists побыстрее будет.

Для MS SQL

Код: plaintext
1.
2.
3.
4.
5.
6.
create procedure БЛА-БЛА-БЛА new_id INT, ...
AS

if exists (select * FROM ТАБЛИЦА WHERE id = new_id) 
update ... 
ELSE 
insert ... 
...
Рейтинг: 0 / 0
13.05.2003, 08:09
    #32158111
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
По скорости - без разницы.
...
Рейтинг: 0 / 0
13.05.2003, 08:25
    #32158116
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
А так
Код: plaintext
1.
2.
3.
update ....

if @@ROWCOUNT =  0 
 insert ...
...
Рейтинг: 0 / 0
13.05.2003, 08:46
    #32158120
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
Я, честно говоря, вообще не понимаю - зачем это надо.
Не представляю ситуацию, когда я не знал бы что делаю - добавляю новую запись или редактирую существующую.
...
Рейтинг: 0 / 0
13.05.2003, 08:49
    #32158123
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
А почемубы не использовать генераторы?
В предложенных вариантах, в случае работы с базой по сети могут возникнуть проблемы, когда два пользователя будут добавлять записи с малым интервалом времени, то могут получить один и тотже ИД, тк. транзакция одного не закончится и поэтому не будет видно другим пользователям внесенные изменения.
По моему мнению для получения уникального ИД лучше использовать ГЕНЕРАТОР.
...
Рейтинг: 0 / 0
13.05.2003, 09:51
    #32158180
moore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
>Я, честно говоря, вообще не понимаю - зачем это надо.
>Не представляю ситуацию, когда я не знал бы что делаю - добавляю новую запись или редактирую существующую.


попробую объяснить...
данные в одной таблице апдейтятся в зависимости от происходящих изменений в другой таблице...
...
Рейтинг: 0 / 0
13.05.2003, 09:56
    #32158190
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
Да, действительно - я как то не подумал об этом. Хотя и сам так делал.
...
Рейтинг: 0 / 0
13.05.2003, 09:59
    #32158192
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
>>данные в одной таблице апдейтятся в зависимости от происходящих изменений в другой таблице...

Так может лучше не процедура а триггер?
...
Рейтинг: 0 / 0
13.05.2003, 10:00
    #32158195
moore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
хм... а я не подумал об этом...
может даже триггер лучше.
...
Рейтинг: 0 / 0
13.05.2003, 10:28
    #32158231
paul_c0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
да триггер дело хорошее но тормазноеееее.
Видел я базу где большинство операций живут на триггерах. Результат
обрабатываем 5000 записей(уменьшаем доход человека на n сумму) и это происходит на 2GHZ сервере в течение 10 минут.
...
Рейтинг: 0 / 0
13.05.2003, 10:33
    #32158239
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
paul_c0, а индексы отключать на время таких изменений не судьба?
...
Рейтинг: 0 / 0
13.05.2003, 10:39
    #32158247
paul_c0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать процедуру
а индексов там вообще не было (да наверное и небудет. Я непривык совать нос не в свое дело). А подавыть советы, дак на это можно ответить тем самым анекдотом (про площадь и почему там нельзя е..я).
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / помогите написать процедуру / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]