Текущий архив: 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