Текущий архив: 2004.06.27;
Скачать: CL | DM;
ВнизПользователям IB Expert. Найти похожие ветки
← →
TohaNik © (2004-05-31 13:47) [0]Подскажите, в чем проблема.
Вот часть объявления ХП.
CREATE PROCEDURE PAU_SUM_NEW (
NAR_ID INTEGER,
D DATE,
CUR SMALLINT,
PE_ID INTEGER,
CNT_ID INTEGER,
COMIS SMALLINT,
NAR_CORRECT INTEGER)
RETURNS
.......
Из другой ХП вызываю строкой
execute procedure pau_sum_new(:NAR_ID,:PAY_DATE,1,null,1,0,null)
переменные объявлены как
DECLARE VARIABLE NAR_ID INTEGER;
DECLARE VARIABLE PAY_DATE DATE;
В результате в экперте получаю
Invalid token.
Invalid request BLR at offset 732
Parameter mismatch for for procedure PAU_SUM_NEW
← →
Johnmen © (2004-05-31 13:52) [1]Соображения:
1. CAST(null AS INTEGER)
2. Где RETURNING_VALUES ? М.б. правильнее SELECT ?
...
← →
Alexandr (2004-05-31 13:52) [2]ну а где returns переменные?
← →
TohaNik © (2004-05-31 14:16) [3]> 1. CAST(null AS INTEGER)
не соображу зачем да и передаться должен именно NULL, но попробовал - ошибка таже.
> ну а где returns переменные?
полностью объявление
CREATE PROCEDURE PAU_SUM_NEW (
NAR_ID INTEGER,
D DATE,
CUR SMALLINT,
PE_ID INTEGER,
CNT_ID INTEGER,
COMIS SMALLINT,
NAR_CORRECT INTEGER)
RETURNS (
TOTALSUM NUMERIC(15,4),
PARTSUM NUMERIC(15,4),
PDVSUM NUMERIC(15,4),
TOTALSUMPDV NUMERIC(15,4),
NARADDSUM NUMERIC(15,4),
COURCE NUMERIC(10,6),
SCALE NUMERIC(15,1),
SUM_NAR_POS_UAN NUMERIC(10,9),
PE_DECLDATE DATE,
TI_NUM VARCHAR(10),
TI_DATE DATE,
PAY_NUM VARCHAR(32),
PAY_DATE DATE)
AS
.....
Возникла необходимость увеличить цены и пересчитать счета
CREATE PROCEDURE PRICE_UPDATE
AS
DECLARE VARIABLE NP_ID INTEGER;
DECLARE VARIABLE NAR_ID INTEGER;
DECLARE VARIABLE PAY_DATE DATE;
begin
for SELECT nar_pos.np_id
FROM NARYADS, PAYMENTS, contracts, nar_pos, clients
where
(NARYADS.CTR_ID = CONTRACTS.CTRID) and
(NARYADS.NAR_ID = PAYMENTS.NAR_ID) and
(NARYADS.CTR_CLID = CLIENTS.CLID) and
(NARYADS.NAR_ID = NAR_POS.NAR_ID) and
((NARYADS.CTR_CLID = 770) or
(NARYADS.CTR_CLID = 403) or
(NARYADS.CTR_CLID = 953)) and
(PAYMENTS.PAY_DATE >= "01.05.2004") and
(CONTRACTS.CTRCOMIS = 0)
into :NP_ID
do
begin
UPDATE nar_pos SET np_price = np_price*1.1
where (nar_pos.np_id = :NP_ID);
end
for SELECT naryads.nar_id, payments.pay_date
FROM NARYADS, PAYMENTS, contracts, clients
where
(NARYADS.CTR_ID = CONTRACTS.CTRID) and
(NARYADS.NAR_ID = PAYMENTS.NAR_ID) and
(NARYADS.CTR_CLID = CLIENTS.CLID) and
((NARYADS.CTR_CLID = 770) or
(NARYADS.CTR_CLID = 403) or
(NARYADS.CTR_CLID = 953)) and
(PAYMENTS.PAY_DATE >= "01.05.2004") and
(CONTRACTS.CTRCOMIS = 0)
into :NAR_ID, :PAY_DATE
do
begin
UPDATE payments SET payments.pay_blocking = 0;
проблемный вызов:)
execute procedure pau_sum_new(:NAR_ID,:PAY_DATE,1,null,1,0,null);
end
end
Эсперт по синтаксису вроде бы пропускает но изменения откатывает
← →
Alexandr (2004-05-31 14:22) [4]ну сказали же тебе, неправильно ты вызываешь pau_sum_new
ибо возвращаемые параметры должны быть.
А ты опятьб тоже самое пишешь.
Возьми в инспекторе свою процедуру и кинь в редактор - оно правильный синтаксис вызова составит и покажет.
Парсер IBExpert"а не полностью анализирует синтаксис, вот и проходит.
А Yaffil уже рубит.
← →
Кщд © (2004-05-31 14:24) [5]Внимательно смотрим Johnmen © (31.05.04 13:52) [1], пункт 2
← →
TohaNik © (2004-05-31 15:11) [6]Нда, пересмотрел всю базу - нигде (до этого) не вызывал из ХП- ХП с выходными параметрами поэтому упорствовал.
Благодарю за ответы.
З.Ы.> оно правильный синтаксис вызова составит и покажет.
Показывает список только из входных параметров.??
← →
Alexandr (2004-05-31 15:15) [7]З.Ы.> оно правильный синтаксис вызова составит и покажет.
Показывает список только из входных параметров.??
Б@я... Ну подумай же ты сам. Ради бога.
← →
TohaNik © (2004-05-31 18:12) [8]<Б@я... Ну подумай же ты сам. Ради бога.
Не ну я надеюсь что не все так плохо - :)
после
Кщд © (31.05.04 14:24) [5]
Внимательно смотрим Johnmen © (31.05.04 13:52) [1], пункт 2
я прочитал доку - увидел волшебную строчку
Syntax EXECUTE PROCEDURE name [: param [, : param …]]
[RETURNING_VALUES : param [, : param …]];
и создал новую ХП- кстати работающую:),
но старая не удаляется и не корректирется,
зациклилась на этой ошибке.
Что с ней делать? :)))
← →
Johnmen © (2004-05-31 18:19) [9]>Что с ней делать? :)))
С ошибкой ?
:)
← →
TohaNik © (2004-05-31 18:35) [10]Не с ошибкой все понятно, а если т. сказать глобально то с
базой - backup не проходит(та же ошибка).
Вообще сегодня выходной(базу не пользуют:) ) так что я восстановился из копии-создал правильную процедуру и можна ити
пиво пить.
Но в базе, там где осталась неправильная процедура, она то бишь
процедура не поддается ни компиляции ни удалению ни корректировке.
Вот исключительно в познавательных целях хотелось узнать, как-то
от ошибки ,а лучше от процедуры избавиться можно, без жестокого насилия над базой:)
← →
Johnmen © (2004-05-31 18:51) [11]Можно попробовать удалить ея из системной таблицы...
← →
TohaNik © (2004-05-31 18:55) [12]Не хочет из системной - засела крепко:))
Ну да ладно оставлю базу на потом - для экспериментов.
Еще раз спасибо.
Страницы: 1 вся ветка
Текущий архив: 2004.06.27;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.034 c