powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как узнать в сохраненной процедуре ?
7 сообщений из 7, страница 1 из 1
Как узнать в сохраненной процедуре ?
    #32250351
Kikos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как узнать в сохраненной процедуре обработал ли update данные или нет !
Вроде как должно было проимзойти исключение и войти в условие
when SQLCODE 100 но оно сюда не попадает ,видимо как то по другому отслеживается ,а как ?
...
Рейтинг: 0 / 0
Как узнать в сохраненной процедуре ?
    #32250359
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй с when any
...
Рейтинг: 0 / 0
Как узнать в сохраненной процедуре ?
    #32250407
Kikos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не работает ! Проблема такая ...
Есть запись.
Ищем по таблице (по where)
если нет то надо добавить ,
а если есть то прибавить значение к найденому !

теоретически
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure TEST (Sys integer,Value integer)
as
begin
  update KKK
       set KKK_VALUE=:Value
      where KKK_SYS=:SYS
   when SQLCODE / ANY 
     do 
      insert into KKK (KKK_SYS) values(:SYS)  
end

Но не работает!
...
Рейтинг: 0 / 0
Как узнать в сохраненной процедуре ?
    #32250450
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шутник :)) Всё там правильно работает. Делай так:
Код: plaintext
1.
2.
3.
4.
5.
6.
create procedure TEST (Sys integer,Value integer)
as
begin
  insert into KKK (KKK_SYS) values(:SYS);
  when ANY do 
    update KKK set KKK_VALUE=:Value where KKK_SYS=:SYS;
end

или проверяй на exists:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create procedure TEST (Sys integer,Value integer)
as
begin
  for select KKK_SYS from KKK where KKK_SYS=:SYS into :SYS as cursor KKK_CUR do
  begin
    update KKK set KKK_VALUE=:Value where current of KKK_CUR;
    exit;
  end
  insert into KKK (KKK_SYS) values(:SYS);
end
...
Рейтинг: 0 / 0
Как узнать в сохраненной процедуре ?
    #32250466
Kikos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первый пример не проходит в силу того ,что это не первичный ключ ,это просто услове поиска т.е. можно добавлять хоть сколько раз!
А по поводу второго то можно и так ,но получается двойной запрос :
1 Это select (where)
2. Update (where)
В таком случае и так можно сделать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure TEST (Sys integer,Value integer)
as
  declare variable SysNom integer;
begin
  select KKK_SysNom from KKK where УСЛОВЕ_ЗАПРОСА  into :SysNom;
  if (SysNom is  null)  then 
    update KKK 
        set KKK_VALUE=:Value
      where KKK_SysNom=:SysNom;
end


Но опять таки ДВА ЗАПРОСА ! Сначала select ищет ,а потом еще и update "ищет"
в ORACLE есть такая примочка что можно SQLCODE применять в услових
IF (SQLCODE=значение ) then ...
Неужели тут такой геморой получается ...У меня прадполагается большая база и для каждой строчки по два запроса сувать ...хм,эт не длов ведь :(
...
Рейтинг: 0 / 0
Как узнать в сохраненной процедуре ?
    #32250490
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и думал, что тебя микросекунды заботят. Конечно же, на 1000000 операций выиграть секунду - это круто )
Я потому тебе и написал пример с курсором. В операторе UPDATE поиск не происходит.
...
Рейтинг: 0 / 0
Как узнать в сохраненной процедуре ?
    #32250509
Kikos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И нечего смеятся :)
Теперь понял в чем фишка !
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как узнать в сохраненной процедуре ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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