Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2008, 14:19   #1
wowka
 
Регистрация: 18.07.2008
Сообщений: 9
По умолчанию ошибка в операторе case

Написал в Firebird триггер
Код:
SET TERM ^ ;
CREATE OR ALTER TRIGGER T_SP_AKT_BIU1 FOR SP_AKT
ACTIVE BEFORE INSERT OR UPDATE POSITION 1
AS
declare variable i integer=0;
BEGIN
if (NEW.ISNODE=1) then EXIT;
if (COALESCE(NEW.K_SY,0)=0) then NEW.K_SY=1;
if (COALESCE(NEW.K_POPR,0)=0) then NEW.K_POPR=1;
if (coalesce(new.K_SP_A,0)=0) then i=1;
if (i=0) then if (coalesce(new.OST_ST,0)=0) then i=1;
if (i=0) then if (coalesce(new.SR_PI,0)=0) then i=1;
if (i=1) then
 begin
  new.N_AM_G=0;
  new.SUM_AM_G=0;
  exit;
 end
case K_SP_A
 when 1 then
  begin
   new.N_AM_G=okr_z(cast(1 as double precision)/new.SR_PI*100,6);
   new.SUM_AM_G=okr_z(cast(new.N_AM_G as double precision)/100*new.SR_PI,6);
  end
 when 2 then
  begin
   new.N_AM_G=okr_z(cast(new.SR_PI as double precision)*(new.SR_PI+1)/2,6);
   new.SUM_AM_G=okr_z(cast(new.PERV_ST as double precision)*new.N_AM_G,6);
  end
 when 3 then
  begin
    new.SUM_AM_G=okr_z(cast(new.OST_ST as double precision)*(new.K_SY*N_AM_G/100),6);
  end 
 when 4 then
  begin
    new.sum_am_g=0;
    new.n_am_g=0;
  end 
END
^

SET TERM ; ^
вылетает ошибка там где - case K_SP_A
The next statement causes the following error:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 18, column 1.
case.

Что я запортачил?
обнаружил что нехватает - end, подставил но ошибка таже
Ум позволяет решать сложные проблемы, хитрость позволяет их обходить, а интеллект позволяет выбирать, что лучше: решать, обходить или не лезть не в своё дело.

Последний раз редактировалось wowka; 23.07.2008 в 14:29.
wowka вне форума Ответить с цитированием
Старый 23.07.2008, 14:43   #2
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Проверь символы. где-то у тебя скорее всего названия не совпадают.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 23.07.2008, 14:55   #3
wowka
 
Регистрация: 18.07.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Roof Посмотреть сообщение
Проверь символы. где-то у тебя скорее всего названия не совпадают.
хм, ненашёл мб ещё идеи есть?
а пока буду искать что не так, чуть позже вылезу гляну сюда, а то обязательно сегодня всё доделать надо.
Ум позволяет решать сложные проблемы, хитрость позволяет их обходить, а интеллект позволяет выбирать, что лучше: решать, обходить или не лезть не в своё дело.
wowka вне форума Ответить с цитированием
Старый 23.07.2008, 19:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а может надо указать, что это поле таблицы ?
case new.K_SP_A
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.07.2008, 10:00   #5
wowka
 
Регистрация: 18.07.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а может надо указать, что это поле таблицы ?
case new.K_SP_A
Я вот как сделал
Код:
new.N_AM_G=case new.K_SP_A
             when 1 then okr_z(cast(1 as double precision)/new.SR_PI*100*new.K_SY,6);
             when 2 then okr_z(cast(new.SR_PI as double precision)/(new.SR_PI*(new.SR_PI+1)/2)*new.K_SY,6);
             when 3 then okr_z(cast(1 as double precision)/new.SR_PI*100*new.K_SY,6);
              else 0 end;
if (new.N_AM_G=0) then then
  new.SUM_AM_G=0;
 else



  new.SUM_AM_G=okr_z(cast(new.N_AM_G as double precision)*new.PERV_ST/100,6);
  new.SUM_AM_G=okr_z(cast(new.OST_ST as double precision)*(new.K_SY*new.N_AM_G/100),6);
  new.SUM_AM_G=okr_z(cast(new.PERV_ST as double precision)*new.N_AM_G,6);
Тока формулы амортизации ещё не все верные, ща буду змагаться)
Ум позволяет решать сложные проблемы, хитрость позволяет их обходить, а интеллект позволяет выбирать, что лучше: решать, обходить или не лезть не в своё дело.
wowka вне форума Ответить с цитированием
Старый 24.07.2008, 11:47   #6
wowka
 
Регистрация: 18.07.2008
Сообщений: 9
По умолчанию

Если кто в ладах с амортизацией прошу ответить, я немного непонимаю,мне в программе надо подставить в формулу коэффициенты ускорения и корректировки, щас код формул такой но там подставил тока коэфф. ускорения (K_SY) , почитал что нашёл по поводу корректировочного коэффициента и засомневался
1 это линейный, 2 - по сумме 3 - уменьшение остатка
Код:
new.N_AM_G=case new.K_SP_A
             when 1 then okr_z(cast(1 as double precision)/new.SR_PI*100*new.K_SY,6);
             when 2 then okr_z(cast(new.SR_PI as double precision)/(new.SR_PI*((new.SR_PI+1)/2))*new.K_SY,6);
             when 3 then okr_z(cast(1 as double precision)/new.SR_PI*100*new.K_SY,6);
              else 0 end;
if (new.N_AM_G=0) then
  new.SUM_AM_G=0;
 else



  new.SUM_AM_G=okr_z(cast(new.N_AM_G as double precision)*new.PERV_ST/100,6);
  new.SUM_AM_G=okr_z(cast(new.PERV_ST as double precision)*new.N_AM_G/100,6);
  new.SUM_AM_G=okr_z(cast(new.PERV_ST as double precision)*new.N_AM_G/100,6);
Ум позволяет решать сложные проблемы, хитрость позволяет их обходить, а интеллект позволяет выбирать, что лучше: решать, обходить или не лезть не в своё дело.
wowka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в другом месте программы вызвать case 0? student_) Общие вопросы по Java, Java SE, Kotlin 9 11.10.2008 13:55
Задача на case klop.92 Помощь студентам 4 28.04.2008 21:17
Аналог паскалевского case MusicMan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 21.04.2008 22:10
Case из STRING. HELP! Altera Компоненты Delphi 12 24.02.2008 12:17
Вопрос об операторе IF Лёка Общие вопросы Delphi 4 01.02.2008 22:33