Страница 1 из 1

Не понимаю где ошибка...

Добавлено: 25 апр 2006, 10:47
Dioxin
вот так прекрасно работает

Код: Выделить всё

CREATE PROCEDURE A2 (
    KOD INTEGER,
    SOSTAV INTEGER,
    MESGOD DATE,
    OBPL NUMERIC(18,2),
    OTPL NUMERIC(18,2),
    SSKODUSL INTEGER,
    SPRASCH INTEGER)
RETURNS (
    PROCENT INTEGER,
    SPOSOB INTEGER,
    KOL INTEGER)
AS
DECLARE VARIABLE SN NUMERIC(18,2);
begin
execute procedure snorma :sostav returning_values :sn;

if (:sprasch=1 or :sprasch=2) then
 for
  select lgot.procent,
        CalcKol(:sostav,lgotusl.kol,family.popravka_kom)
  from family,lgot,lgotusl
  where family.sskodkvar=:kod and
        family.sskodlgot=lgot.kodlgot and
        lgotusl.sskodlgot=family.sskodlgot and
        lgotusl.sskodusl=:sskodusl and
        family.beginlgot<=:mesgod and
       (family.endlgot>:mesgod or family.endlgot is null)
  into :procent, :kol
 do suspend;


if ((:sprasch=3) and (:sostav>0)) then
 if (:sn>:obpl/:sostav)
 then
  for
   select lgot.procent,
          lgotusl.sposob,
          CalcKol(:sostav,lgotusl.kol,family.popravka_kvp)
   from family,lgot,lgotusl
   where family.sskodkvar=:kod and
         family.sskodlgot=lgot.kodlgot and
         lgotusl.sskodlgot=family.sskodlgot and
         lgotusl.sskodusl=:sskodusl and
         family.beginlgot<=:mesgod and
        (family.endlgot>:mesgod or family.endlgot is null)
   into :procent, :sposob, :kol
  do suspend;
 else
  for
   select lgot.procent,
          zam(lgotusl.sposob,3),
          CalcKol(:sostav,lgotusl.kol,family.popravka_kvp)
   from family,lgot,lgotusl
   where family.sskodkvar=:kod and
         family.sskodlgot=lgot.kodlgot and
         lgotusl.sskodlgot=family.sskodlgot and
         lgotusl.sskodusl=:sskodusl and
         family.beginlgot<=:mesgod and
        (family.endlgot>:mesgod or family.endlgot is null)
   into :procent, :sposob, :kol
  do suspend;

if ((:sprasch=4) and (:sostav>0)) then
 if (:sn>:otpl/:sostav)
 then
  for
   select lgot.procent,
          lgotusl.sposob,
          CalcKol(:sostav,lgotusl.kol,family.popravka_otp)
   from family,lgot,lgotusl
   where family.sskodkvar=:kod and
         family.sskodlgot=lgot.kodlgot and
         lgotusl.sskodlgot=family.sskodlgot and
         lgotusl.sskodusl=:sskodusl and
         family.beginlgot<=:mesgod and
        (family.endlgot>:mesgod or family.endlgot is null)
   into :procent, :sposob, :kol
  do suspend;
 else
  for
   select lgot.procent,
          zam(lgotusl.sposob,3),
          CalcKol(:sostav,lgotusl.kol,family.popravka_otp)
   from family,lgot,lgotusl
   where family.sskodkvar=:kod and
         family.sskodlgot=lgot.kodlgot and
         lgotusl.sskodlgot=family.sskodlgot and
         lgotusl.sskodusl=:sskodusl and
         family.beginlgot<=:mesgod and
        (family.endlgot>:mesgod or family.endlgot is null)
   into :procent, :sposob, :kol
  do suspend;
end
но мне надо после выгрузки в переменные проделать с ними кой какие манипуляции а потом уже вернуть
делаю вот так...

Код: Выделить всё

CREATE PROCEDURE A2 (
    KOD INTEGER,
    SOSTAV INTEGER,
    MESGOD DATE,
    OBPL NUMERIC(18,2),
    OTPL NUMERIC(18,2),
    SSKODUSL INTEGER,
    SPRASCH INTEGER)
RETURNS (
    PROCENT INTEGER,
    SPOSOB INTEGER,
    KOL INTEGER)
AS
DECLARE VARIABLE SN NUMERIC(18,2);
begin
execute procedure snorma :sostav returning_values :sn;

if (:sprasch=1 or :sprasch=2) then
 for
  select lgot.procent,
        CalcKol(:sostav,lgotusl.kol,family.popravka_kom)
  from family,lgot,lgotusl
  where family.sskodkvar=:kod and
        family.sskodlgot=lgot.kodlgot and
        lgotusl.sskodlgot=family.sskodlgot and
        lgotusl.sskodusl=:sskodusl and
        family.beginlgot<=:mesgod and
       (family.endlgot>:mesgod or family.endlgot is null)
  into :procent, :kol
 do suspend;


if ((:sprasch=3) and (:sostav>0)) then
 if (:sn>:obpl/:sostav)
 then
  for
   select lgot.procent,
          lgotusl.sposob,
          CalcKol(:sostav,lgotusl.kol,family.popravka_kvp)
   from family,lgot,lgotusl
   where family.sskodkvar=:kod and
         family.sskodlgot=lgot.kodlgot and
         lgotusl.sskodlgot=family.sskodlgot and
         lgotusl.sskodusl=:sskodusl and
         family.beginlgot<=:mesgod and
        (family.endlgot>:mesgod or family.endlgot is null)
   into :procent, :sposob, :kol
  do suspend;
 else
  for
   select lgot.procent,
          zam(lgotusl.sposob,3),
          CalcKol(:sostav,lgotusl.kol,family.popravka_kvp)
   from family,lgot,lgotusl
   where family.sskodkvar=:kod and
         family.sskodlgot=lgot.kodlgot and
         lgotusl.sskodlgot=family.sskodlgot and
         lgotusl.sskodusl=:sskodusl and
         family.beginlgot<=:mesgod and
        (family.endlgot>:mesgod or family.endlgot is null)
   into :procent, :sposob, :kol
  do suspend;

if ((:sprasch=4) and (:sostav>0)) then
 if (:sn>:otpl/:sostav)
 then
  for
   select lgot.procent,
          lgotusl.sposob,
          CalcKol(:sostav,lgotusl.kol,family.popravka_otp)
   from family,lgot,lgotusl
   where family.sskodkvar=:kod and
         family.sskodlgot=lgot.kodlgot and
         lgotusl.sskodlgot=family.sskodlgot and
         lgotusl.sskodusl=:sskodusl and
         family.beginlgot<=:mesgod and
        (family.endlgot>:mesgod or family.endlgot is null)
   into :procent, :sposob, :kol
  do suspend;
 else
  for
   select lgot.procent,
          zam(lgotusl.sposob,3),
          CalcKol(:sostav,lgotusl.kol,family.popravka_otp)
   from family,lgot,lgotusl
   where family.sskodkvar=:kod and
         family.sskodlgot=lgot.kodlgot and
         lgotusl.sskodlgot=family.sskodlgot and
         lgotusl.sskodusl=:sskodusl and
         family.beginlgot<=:mesgod and
        (family.endlgot>:mesgod or family.endlgot is null)
   into :procent, :sposob, :kol
  do begin

       end;
end
и говорит ошибку

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 95, char 4.
end.
чо не так то?
все есть и в хелпе так.... в смысле синтаксиса...

Добавлено: 25 апр 2006, 12:18
Ivan_Pisarevsky
Точку с запятой убери после, End-а, то бишь в 95 строке :)

Добавлено: 25 апр 2006, 13:08
Dioxin
Получилось...
......
where family.sskodkvar=:kod and
family.sskodlgot=lgot.kodlgot and
lgotusl.sskodlgot=family.sskodlgot and
lgotusl.sskodusl=:sskodusl and
family.beginlgot<=:mesgod and
(family.endlgot>:mesgod or family.endlgot is null)
into :procent, :sposob, :kol
do begin
suspend;
end
во первых низя похоже пустые бегин/энд...
ну так эт чтоб меньше забивать... решил на пустом проверить
во вторых я как в паскале не поставил ; после суспенда

Добавлено: 25 апр 2006, 15:56
SAMZ
Dioxin писал(а):Получилось...
......
во первых низя похоже пустые бегин/энд...
ну так эт чтоб меньше забивать... решил на пустом проверить
во вторых я как в паскале не поставил ; после суспенда
Пустые begin end начиная с FB1.5.3 можно

Добавлено: 25 апр 2006, 18:18
dimitr
SAMZ писал(а):Пустые begin end начиная с FB1.5.3 можно
c 1.5.0

Добавлено: 02 май 2006, 09:47
Dioxin
Виноват... не указал какой сервер.
ИнтерБазе 7.1 СП2
Лицензия Унлимитед Абсцэсс :)

Добавлено: 02 май 2006, 10:38
kdv
Лицензия Унлимитед Абсцэсс Smile
купленная, или нет, потому и улыбочка?

Добавлено: 03 май 2006, 09:36
Dioxin
Многоуважаемый KDV
я понимаю всю вашу ненависть к тем кто проги не покупает...
но!
1. Нужно чисто для обучения - глупо ради этого платить такие бабки...
2. Зачем покупать если моно скачать файл лицензии...
3. Я не получаю финансовой выгоды от этого так что все законно...
Я же его никому не ставлю ее... тем более за бабки...
тем более что под ХП СП2 он падает на не оч сложном запросе...
вин2000 пищит но держит:)

Добавлено: 03 май 2006, 09:49
kdv
1. Нужно чисто для обучения - глупо ради этого платить такие бабки...
какого фига тогда поставил?
2. Зачем покупать если моно скачать файл лицензии...
зачем покупать, если можно украсть.
3. Я не получаю финансовой выгоды от этого так что все законно...
Я же его никому не ставлю ее... тем более за бабки...
не пори чушь. ты не имеешь права НИКАК его использовать, если не купил. Еще не хватало "ставить за бабки".
тем более что под ХП СП2 он падает на не оч сложном запросе...
ну и спрашивается - зачем?

не понимаю я - спер, всем доложил, и радуется. во весело-то... Всех надул.

Добавлено: 03 май 2006, 13:24
Dioxin
KDV
я тут не оч хорошо засветился(
можете удалить мой аккаунт?
заведу другой
буду яро чтить афтарские права и тд и тп... но... токо на словах)

Добавлено: 03 май 2006, 14:55
kdv
удалять необязательно, а чтить все равно надо.

Добавлено: 03 май 2006, 16:15
hvlad
Dioxin писал(а):1. Нужно чисто для обучения - глупо ради этого платить такие бабки...
Триалы для этого есть

Добавлено: 04 май 2006, 08:42
Dimitry Sibiryakov
И вообще - качать для изучения 60 метров IB7.5 когда есть трехметровый FB2? Не понимаю.

Добавлено: 05 май 2006, 11:50
Dioxin
Во первых не 7.5 - он глючный а 7.1
во вторых мне стало стыдно за такие небогоугодные дела и я все постирал... :?
в третьих... перейду на PostGreSQL 8.1.3

Добавлено: 05 май 2006, 12:43
hvlad
Dioxin писал(а):перейду на PostGreSQL 8.1.3
И ладненько
Назад не просись :lol: