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

Вниз

Как передать в InterBase параметры   Найти похожие ветки 

 
VaZ ©   (2003-02-05 07:42) [0]

День добрый...нужно передать из одной ХП параметры в другую не используя программу..Это возможно??? То есть из программыы передаются данные в ХП а из нее вызывается другая и я хочу в ней для условий использовать теже значения что передаю в первую.
CREATE PROCEDURE REVISION_STEP_C (
REVISION_DATE DATE,
ID_DEP INTEGER,
MYDATA VARCHAR(10))
AS
begin
UPDATE income
SET REV_REST_C=0
WHERE (REV_REST_C<>0) and (CR_DATE=:REVISION_DATE) and (ID_DEP=:ID_DEP);

UPDATE CONSTS
SET VALUE_B = :MYDATA
WHERE LABEL="SV_LAST_REV_DATE";

EXECUTE PROCEDURE RECALC_TOW_REST;

end

и вот моя модификация второго
CREATE PROCEDURE RECALC_TOW_REST2 (
REVISION_DATE DATE,
ID_DEP INTEGER)
AS
begin

UPDATE INCOME
SET TOW_REST = CONFIRMED_REST - REV_REST_C + INITIAL_INCOME + EXTRA_INCOME + MOVED_IN - MOVED_OUT - RETURNED - RET_TO_PO
WHERE (ID_DEP=:ID_DEP) AND (CR_DATE=:REVISION_DATE) ;
end


 
VaZ ©   (2003-02-05 07:53) [1]

поправка к первому
EXECUTE PROCEDURE RECALC_TOW_REST2


 
Наталия ©   (2003-02-05 08:08) [2]

А что, параметры разве нельзя указать?
EXECUTE PROCEDURE RECALC_TOW_REST2(:REVISION_DATE,:ID_DEP);




 
VaZ ©   (2003-02-05 08:26) [3]

Наталия
Вот что выдало после поправки...хотя я подобное уже пробовал...мож чего то не догоняю...


This operation is not defined for system tables.
unsuccessful metadata update.
ERASE RDB$PROCEDURE_PARAMETERS failed.
invalid request BLR at offset 215.
parameter mismatch for procedure RECALC_TOW_REST.


То есть он ссылается на прежнюю ХП...и новую ввести не удается


 
Виталий Панасенко   (2003-02-05 08:31) [4]

Дык, удали старую и создай новую...




 
VaZ ©   (2003-02-05 08:53) [5]

Виталий как мен удалить старую если она нужна в другом случае?
я просто хотел заменить в данной процедуре ссылку на новую...которую я создал и передать параметры... Удаление старой невозможно...


 
Наталия ©   (2003-02-05 09:23) [6]

А ALTER PROCEDURE не пробовал использовать?


 
VaZ ©   (2003-02-05 09:27) [7]

Как это??? поподробнее плиз...тут блин приходится до всего своим умом доходить...не успеваю..гы


 
VaZ ©   (2003-02-05 09:30) [8]

и что это даст?


 
Delirium^.Tremens ©   (2003-02-05 09:33) [9]

1. Отключаемся от базы
2. Вновь подключаемся
3. Переопределяем REVISION_STEP_C :

ALTER PROCEDURE REVISION_STEP_C (
REVISION_DATE DATE,
ID_DEP INTEGER,
MYDATA VARCHAR(10))
AS
begin
UPDATE income
SET REV_REST_C=0
WHERE (REV_REST_C<>0) and (CR_DATE=:REVISION_DATE) and (ID_DEP=:ID_DEP);

UPDATE CONSTS
SET VALUE_B = :MYDATA
WHERE LABEL="SV_LAST_REV_DATE";

/* EXECUTE PROCEDURE RECALC_TOW_REST; */

end

4. Добавляем параметры в RECALC_TOW_REST
5. Вновь переопределяем REVISION_STEP_C :

ALTER PROCEDURE REVISION_STEP_C (
REVISION_DATE DATE,
ID_DEP INTEGER,
MYDATA VARCHAR(10))
AS
begin
UPDATE income
SET REV_REST_C=0
WHERE (REV_REST_C<>0) and (CR_DATE=:REVISION_DATE) and (ID_DEP=:ID_DEP);

UPDATE CONSTS
SET VALUE_B = :MYDATA
WHERE LABEL="SV_LAST_REV_DATE";

EXECUTE PROCEDURE RECALC_TOW_REST(...Параметры...);
end



 
VaZ ©   (2003-02-05 09:43) [10]

2 Delirium^.Tremensтак уже ближе..отключаюсь подключаюсь...потом меняю greate на alter закрываю и пишет ту же ошибку что и выше... или опять не то чтото?
как alter более правильно юзать?


 
Delirium^.Tremens ©   (2003-02-05 09:46) [11]

Вернуться к п.1, п.2
В пункте 3 закомментировать в первой процедуре вызов второй и откомпилировать первую.
Продолжить с п.4


 
VaZ ©   (2003-02-05 09:52) [12]

так при компиляции то ошибка и вылазит описанная выше


 
Delirium^.Tremens ©   (2003-02-05 09:53) [13]

Вернуться к п.1 и, если не помогает, перезапустить IB server


 
Nerpa   (2003-02-05 10:51) [14]

Нельзя сделать ALTER (с изменением описания) для объекта, который используется другим кодом. Пройдись по ссылкам (кто кого использует), удали (отключи) всех, кто использует твою процедуру, а затем спокойно её меняй (ALTER или DROP... CREATE).
После этого не забудь восстановить тех кого удалила (отключила).
Когда много ХП, триггеров и связей между ними я предпочитаю вообще грохнуть все ХП и триггеры и заново всё создать. Для этого у меня есть скрипт всех объектов базы. При этом данные остаются целыми, а коды ХП и триггеров пересоздаются. Не надо напрягать мозги, какая ... мою ХП ещё использует.


 
VaZ ©   (2003-02-05 11:05) [15]

Вот это круто... у меня вызов ХП RECALC_TOW_REST идет из двух мест..то есть я дропаю обе ХП
потом я создал общую ХП
CREATE PROCEDURE REVISION_STEP_C2 (
REVISION_DATE DATE,
ID_DEP INTEGER,
MYDATA VARCHAR(10))
AS
begin
UPDATE income
SET REV_REST_C=0
WHERE (REV_REST_C<>0) and (CR_DATE=:REVISION_DATE) AND (ID_DEP=:ID_DEP);

UPDATE CONSTS
SET VALUE_B = :MYDATA
WHERE LABEL="SV_LAST_REV_DATE";

UPDATE INCOME
SET TOW_REST = CONFIRMED_REST - REV_REST_C + INITIAL_INCOME + EXTRA_INCOME + MOVED_IN - MOVED_OUT - RETURNED - RET_TO_PO
WHERE (ID_DEP=:ID_DEP) AND (CR_DATE=:REVISION_DATE) ;
end


и воссоздаю ту ХП что ссылалась на RECALC_TOW_REST??????



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

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

Наверх




Память: 0.5 MB
Время: 0.014 c
14-63772
sim
2003-02-03 11:21
2003.02.20
Win2000


14-63773
гомер
2003-02-03 12:00
2003.02.20
Сквозной поиск в базе по всем таблицам


14-63752
aga
2003-02-05 20:54
2003.02.20
CHM


3-63549
Cossys
2003-02-03 16:23
2003.02.20
Как быстро заполнить поля таблицы


3-63527
Виталий
2003-01-30 12:04
2003.02.20
DBGrid - Как програмно перелезть в другое поле (колонку)?