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

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Dioxin
Сообщения: 26
Зарегистрирован: 03 июн 2005, 08:35

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

Сообщение Dioxin » 25 апр 2006, 10:47

вот так прекрасно работает

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

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.
чо не так то?
все есть и в хелпе так.... в смысле синтаксиса...

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 25 апр 2006, 12:18

Точку с запятой убери после, End-а, то бишь в 95 строке :)

Dioxin
Сообщения: 26
Зарегистрирован: 03 июн 2005, 08:35

Сообщение Dioxin » 25 апр 2006, 13:08

Получилось...
......
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
во первых низя похоже пустые бегин/энд...
ну так эт чтоб меньше забивать... решил на пустом проверить
во вторых я как в паскале не поставил ; после суспенда

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 25 апр 2006, 15:56

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

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 25 апр 2006, 18:18

SAMZ писал(а):Пустые begin end начиная с FB1.5.3 можно
c 1.5.0

Dioxin
Сообщения: 26
Зарегистрирован: 03 июн 2005, 08:35

Сообщение Dioxin » 02 май 2006, 09:47

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 май 2006, 10:38

Лицензия Унлимитед Абсцэсс Smile
купленная, или нет, потому и улыбочка?

Dioxin
Сообщения: 26
Зарегистрирован: 03 июн 2005, 08:35

Сообщение Dioxin » 03 май 2006, 09:36

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 03 май 2006, 09:49

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

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

Dioxin
Сообщения: 26
Зарегистрирован: 03 июн 2005, 08:35

Сообщение Dioxin » 03 май 2006, 13:24

KDV
я тут не оч хорошо засветился(
можете удалить мой аккаунт?
заведу другой
буду яро чтить афтарские права и тд и тп... но... токо на словах)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 03 май 2006, 14:55

удалять необязательно, а чтить все равно надо.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 03 май 2006, 16:15

Dioxin писал(а):1. Нужно чисто для обучения - глупо ради этого платить такие бабки...
Триалы для этого есть

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 04 май 2006, 08:42

И вообще - качать для изучения 60 метров IB7.5 когда есть трехметровый FB2? Не понимаю.

Dioxin
Сообщения: 26
Зарегистрирован: 03 июн 2005, 08:35

Сообщение Dioxin » 05 май 2006, 11:50

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

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 05 май 2006, 12:43

Dioxin писал(а):перейду на PostGreSQL 8.1.3
И ладненько
Назад не просись :lol:

Ответить