Форум: "Базы";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];
Вниз
Как передать в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c