![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как передать в InterBase параметры [D5, IB5.x, IB6.x]
VaZ © (2003-02-05 07:42:00)День добрый...нужно передать из одной ХП параметры в другую не используя программу..Это возможно??? То есть из программыы передаются данные в ХП а из нее вызывается другая и я хочу в ней для условий использовать теже значения что передаю в первую.
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 11:05:00) [1]Вот это круто... у меня вызов ХП 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??????
Nerpa (2003-02-05 10:51:00) [2]Нельзя сделать ALTER (с изменением описания) для объекта, который используется другим кодом. Пройдись по ссылкам (кто кого использует), удали (отключи) всех, кто использует твою процедуру, а затем спокойно её меняй (ALTER или DROP... CREATE).
После этого не забудь восстановить тех кого удалила (отключила).
Когда много ХП, триггеров и связей между ними я предпочитаю вообще грохнуть все ХП и триггеры и заново всё создать. Для этого у меня есть скрипт всех объектов базы. При этом данные остаются целыми, а коды ХП и триггеров пересоздаются. Не надо напрягать мозги, какая ... мою ХП ещё использует.
Delirium^.Tremens (2003-02-05 09:53:00) [3]Вернуться к п.1 и, если не помогает, перезапустить IB server
VaZ (2003-02-05 09:52:00) [4]так при компиляции то ошибка и вылазит описанная выше
Delirium^.Tremens (2003-02-05 09:46:00) [5]Вернуться к п.1, п.2
В пункте 3 закомментироватьв первой процедуре вызов второй и откомпилировать первую.
Продолжить с п.4
VaZ (2003-02-05 09:43:00) [6]2 Delirium^.Tremensтак уже ближе..отключаюсь подключаюсь...потом меняю greate на alter закрываю и пишет ту же ошибку что и выше... или опять не то чтото?
как alter более правильно юзать?
Delirium^.Tremens (2003-02-05 09:33:00) [7]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:30:00) [8]и что это даст?
VaZ (2003-02-05 09:27:00) [9]Как это??? поподробнее плиз...тут блин приходится до всего своим умом доходить...не успеваю..гы
Наталия (2003-02-05 09:23:00) [10]А ALTER PROCEDURE не пробовал использовать?
VaZ (2003-02-05 08:53:00) [11]Виталий как мен удалить старую если она нужна в другом случае?
я просто хотел заменить в данной процедуре ссылку на новую...которую я создал и передать параметры... Удаление старой невозможно...
Виталий Панасенко (2003-02-05 08:31:00) [12]Дык, удали старую и создай новую...
VaZ (2003-02-05 08:26:00) [13]Наталия
Вот что выдало после поправки...хотя я подобное уже пробовал...мож чего то не догоняю...
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:08:00) [14]А что, параметры разве нельзя указать?
EXECUTE PROCEDURE RECALC_TOW_REST2(:REVISION_DATE,:ID_DEP);
VaZ (2003-02-05 07:53:00) [15]поправка к первому
EXECUTE PROCEDURE RECALC_TOW_REST2