Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.029 c
14-1085948896
Piter
2004-05-31 00:28
2004.06.27
Таблица описателей процеса


8-1081509688
Kreon
2004-04-09 15:21
2004.06.27
TCanvas.LockCount - что за свойство?


8-1081451647
SDV
2004-04-08 23:14
2004.06.27
Помещение изображения в поток памяти


6-1082631616
ultracrash
2004-04-22 15:00
2004.06.27
Как определить скорость интернета


1-1087112610
AndersoNRules
2004-06-13 11:43
2004.06.27
F : Function : Extended;