Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.15;
Скачать: CL | DM;

Вниз

Перестал работать скрипт   Найти похожие ветки 

 
pavel_guzhanov ©   (2007-04-16 08:45) [0]

Здравствуйте! Приведенный ниже скрипт работал нормально на БД InterBase5.6. При переходе на FireBird 1.5.3 работать перестал. Я предполагаю, что это из-за отличий и ограничений в языке SQL у разных баз. Может быть кто-то заметит в синтаксисе фрагменты, которые работают в IB5.6 и не смогут работать в FB 1.5.3?

SET NAMES WIN1251;
CONNECT "base.gdb" USER "SYSDBA" PASSWORD "111";

delete from ann where accn_id in (select accn_id from accn where cont_id = 3751);

create exception ERR$TMP "Неверно задан номер";

set term ^;
CREATE PROCEDURE PROC$TMP
AS
    declare variable CONT_J_ID integer;
    declare variable CONT_ID integer;
    declare variable ACCN_PREF varchar(8);
    declare variable ACCN_NO integer;
    declare variable ACCN_SUFF varchar(8);
    declare variable STATUS smallint;
    declare variable FIO varchar(128);
    declare variable OPEN_DATE date;
begin
 begin
   select CONT_ID from CONT
   where CONT_NAME = "2020000"
   into :CONT_J_ID;
   when any do exception ERR$TMP;
 end

 for
   select
     A.ACCN_PREF, A.ACCN_NO, A.ACCN_SUFF, A.STATUS,
     (select FIO from MEMB M where M.MEMB_ID = A.MEMB_ID) as FIO,
     A.OPEN_DATE
   from ACCN A
   where A.CONT_ID = :CONT_J_ID and A.META_ACCN <> "T"
   into
     :ACCN_PREF, :ACCN_NO, :ACCN_SUFF, :STATUS, :FIO, :OPEN_DATE
   as cursor FOO
 do
 begin
   CONT_ID = gen_id(CONT_ID_GEN, 1);
   insert into CONT (
     CONT_ID,
     CONT_PREF,
     CONT_NO,
     CONT_SUFF,
     FILIAL,
     CONT_TYPE,
     HIDDEN,
     STATUS,
     DEP_NAME,
     OPEN_DATE,
     PERIOD,
     COM_1, COM_2, COM_PRC, COM_OUTPENS, COM_OUTHEIR, COM_OUTCASH, COM_MOVE, COM_CLOSE,
     TYPE_COM_1, TYPE_COM_2, TYPE_COM_PRC, TYPE_COM_OUTPENS, TYPE_COM_OUTHEIR, TYPE_COM_OUTCASH, TYPE_COM_MOVE, TYPE_COM_CLOSE,
     TYPE_COM_1C, TYPE_COM_2C, TYPE_COM_PRCC, TYPE_COM_OUTPENSC, TYPE_COM_OUTHEIRC, TYPE_COM_OUTCASHC, TYPE_COM_MOVEC, TYPE_COM_CLOSEC)
   values (
     :CONT_ID,
     :ACCN_PREF,
     :ACCN_NO,
     :ACCN_SUFF,
     0,
     2,
     "F",
     :STATUS,
     :FIO,
     :OPEN_DATE,
     1,
     0, 0, 0, 0, 0, 0, 0, 0,
     "F", "F", "F", "F", "F", "F", "F", "F",
     "F", "F", "F", "F", "F", "F", "F", "F");

   update ACCN
   set CONT_ID = :CONT_ID
   where current of FOO;
 end

/*  delete from CONT where CONT_ID = :CONT_J_ID;*/

 exit;
end^
set term ;^

execute procedure PROC$TMP;
commit work;

drop procedure PROC$TMP;
drop exception ERR$TMP;

exit;

COMMIT WORK;
EXIT;


 
Jan1   (2007-04-16 08:59) [1]

1. Что значит перестал?
2. Запустите его в IBExpert - там есть отладка ХП.


 
pavel_guzhanov ©   (2007-04-16 09:19) [2]

Стал выдавать сообщение "Неверно задан номер", при том, что номер задан правильно.

Значит ошибка в этом месте:

>  begin
>    select CONT_ID from CONT
>    where CONT_NAME = "2020000"
>    into :CONT_J_ID;
>    when any do exception ERR$TMP;
>  end


Как это записать в виде, который был бы понятен FireBird?


 
Johnmen ©   (2007-04-16 09:23) [3]

А ты сделал backup под IB5.6 и restore под FB1.5?


 
pavel_guzhanov ©   (2007-04-16 09:27) [4]


> А ты сделал backup под IB5.6 и restore под FB1.5?


да, это делается у нас обязательно при переходе с IB на FB. Но скрипта этого нет в базе, он запускается при необходимости из внешнего файла.


 
Johnmen ©   (2007-04-16 09:30) [5]

Кто обрабатывал этот скрипт? И кто сейчас?


 
Johnmen ©   (2007-04-16 09:33) [6]

И ещё. Откуда сервер должен знать, что select CONT_ID from CONT ... возвращает единственное значение?


 
pavel_guzhanov ©   (2007-04-16 09:40) [7]

Cont_id - это автоинкрементное поле, первичный ключ.. Этот скрипт запускают в филиалах из IBExpert. Запускают не программисты. Работали они под IB, но теперь решили все перевести под один стандарт, под FB. Переход и работа основных программ прошли безболезненно, а с этим скриптом - проблема, причем в двух филиалах одинаковая. Скрипты в обоих филиалах идентичны. Писались они давно, используются несколько лет. Те, кто писал эти скрипты, уже давно у нас не работают.


 
Johnmen ©   (2007-04-16 09:51) [8]


> Cont_id - это автоинкрементное поле, первичный ключ..

Ну и? CONT_NAME не ключ ведь. И индекса по нему нет уникального, как я понимаю...


 
PEAKTOP ©   (2007-04-16 09:57) [9]

Помоему, Johnmen как всегда прав:
> Откуда сервер должен знать, что select CONT_ID from CONT ... возвращает единственное значение?

Попробуй

>  begin
>    select first 1 CONT_ID from CONT
>    where CONT_NAME = "2020000"
>    into :CONT_J_ID;
>    when any do exception ERR$TMP;
>  end

если скрипт пойдет без ошибок, понятно станет где копать ....


 
pavel_guzhanov ©   (2007-04-16 11:04) [10]


> Откуда сервер должен знать, что select CONT_ID from CONT
> ... возвращает единственное значение?


Он и возвращает не единственное значение... А потом просто пробегает циклом по всем полученным значениям


 
DrPass ©   (2007-04-16 11:22) [11]


> Он и возвращает не единственное значение... А потом просто
> пробегает циклом по всем полученным значениям

В данном скрипте он никуда не пробегает - он ожидает единственное значение и выдает ошибку... неизвестно какую, т.к. она давится when any. Убери да посмотри. Так или иначе, проблемы судя по всему не с Firebird, а с целостностью данных


 
ЮЮ ©   (2007-04-16 11:28) [12]

>Стал выдавать сообщение "Неверно задан номер", при том, что номер задан правильно.

Правильный номер это тот номер, которого ещё нет в таблице CONT. Если уже есть, то он считается неправильным. (Если я правильно понял смысл  when any do exception ERR$TMP).

Т.к. в INSERTE в CONT это поле не задается, остается предполагать, что оно где-то задается/сбрасываеися в триггере. Или было установлено последним из уже неработающих прогаммистов для "поралича", зная об уровне компетентности оставшихся :)


 
Jan1   (2007-04-16 11:51) [13]

2 автор
уже давно бы скачал IBExpert да отдебажил свою ХП. И время зря не тратил и много чего узнал бы.


 
Desdechado ©   (2007-04-16 11:58) [14]

Не в тему, но:
> CONNECT "base.gdb" USER "SYSDBA" PASSWORD "111";
И каждый знает вот это? И везде одно и то же?


 
Johnmen ©   (2007-04-16 12:12) [15]

Я бы тоже посоветовал что-нибудь, да только беспокоит
>зная об уровне компетентности оставшихся :)
:)


 
pavel_guzhanov ©   (2007-04-16 12:27) [16]


> Не в тему, но:
> > CONNECT "base.gdb" USER "SYSDBA" PASSWORD "111";
> И каждый знает вот это? И везде одно и то же?


Естественно, это я указал в том тексте, который запостил в форум. На самом деле эти данные (кроме имени пользователя) совсем другие.


> зная об уровне компетентности оставшихся :)


Если бы не смайлик, я бы оскорбился :о))


 
Карелин Артем ©   (2007-04-16 12:41) [17]

Я бы посоветовал убрать проверку ошибки и посмотреть что за ошибку сервер на самом деле выдает. А так опишу чем утро порадовало меня...
Мне сегодня звонили юзеры, они открыли файл базы FB екселем и спрашивали, почему же у них не работает теперь программа...



Страницы: 1 вся ветка

Текущий архив: 2007.07.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
2-1182680629
Gringoire
2007-06-24 14:23
2007.07.15
Программный клик


15-1181950866
ShadowGM
2007-06-16 03:41
2007.07.15
Буффер обмена


15-1181700973
Slider007
2007-06-13 06:16
2007.07.15
С днем рождения ! 13 июня 2007 среда


3-1176308319
azamatufa
2007-04-11 20:18
2007.07.15
Рекурсия, дерево


11-1165212425
ebz
2006-12-04 09:07
2007.07.15
override in KOL