Форум: "Базы";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
ВнизCreate Procedure Найти похожие ветки
← →
BlackKing (2003-12-01 11:43) [0]Подскажите пожалуйста, что сдесь не так? почему ругается на: Column unknown. IDMAT.
CREATE PROCEDURE SetMatDaudz(IdMat INT)
AS
Declare variable Sum1 Double precision;
Declare variable Sum2 Double precision;
BEGIN
Select Sum(SSar_Daudz) From Sp_Sar Where Sp_Sar.Id_Mat =IdMat INTO SUM1;
IF (SUM1 IS NULL) THEN SUM1=0;
Select Sum(SVSar_Daudz) From SVp_Sar Where SVp_Sar.Id_Mat =IdMat INTO SUM2;
IF (SUM2 IS NULL) THEN SUM2=0;
Update Material Set Mat_Daudz = SUM1+SUM2 Where Material.Id_Mat =IdMat;
END;
← →
Val (2003-12-01 11:49) [1]:IdMat - поскольку - параметр
← →
BlackKing (2003-12-01 11:56) [2]hmmm..в хелпе по IB нигде в примерах нет ":"
да и сам генератор в IBExpert без ":" делает.
к тому же ругается на первую строку.
если напишу
CREATE PROCEDURE SetMatDaudz(:IdMat INTEGER)
кричит : не знаю что такое ":".
← →
BlackKing (2003-12-01 11:58) [3]Всё, разобрался.
Senks".
← →
Val (2003-12-01 12:01) [4]>BlackKing (01.12.03 11:56) [2]
"...мать тихо ответило эхо..." :)
читаем доку по ИБ, про процедуры читаем, убираем двоеточие из определения параметра и вставляем при использовании его внутри процедуры.
← →
BlackKing (2003-12-01 12:26) [5]CREATE PROCEDURE SETMATDAUDZ (IDMAT INTEGER)
AS
DECLARE VARIABLE SUM2 DOUBLE PRECISION;
DECLARE VARIABLE SUM1 DOUBLE PRECISION;
begin
Select Sum(SSar_Daudz) From Sp_Sar Where Sp_Sar.Id_Mat =:IdMat INTO :SUM1;
IF (:SUM1 IS NULL) THEN SUM1=0;
Select Sum(SVSar_Daudz) From SVp_Sar Where SVp_Sar.Id_Mat =:IdMat INTO :SUM2;
IF (:SUM2 IS NULL) THEN SUM2=0;
Update Material Set Mat_Daudz = :SUM1+:SUM2 Where Material.Id_Mat =:IdMat;
end
IBExpert такое принял, создал процедуру, но когда я пытаюсь создать её через TQuery.ExecSQL - ругается. Почему? там другой синткс или надо процедуру создавать поэтапно?
ругается на ету строку:
Select Sum(SSar_Daudz) From Sp_Sar Where Sp_Sar.Id_Mat =:IdMat INTO :SUM1;
← →
Val (2003-12-01 12:34) [6]скажите, а какова необходимость выполнять данный ддл-скрипт с клиента?
← →
BlackKing (2003-12-01 12:43) [7]смысл таков: прога установлена в другом городе, я же не поеду к клиенту, чтобы в его базу добавить ету процедуру. я просто пошлю ЕХЕ-файлик и он всё сделает.
Ну ето тока пример.
Ещё делаю програмку, которая автоматически будет синхронизировать структуру базы клиента с моей (я послал ему структуру моей, а программа его базу подогнала под мою).
И т.д.
Да и вааще, не люблю я пользоваться чужими программами, особенно где много наворотов мне не нужных. Обычно делаю свои простенькие редакторы.
← →
Val (2003-12-01 12:52) [8]Ясно. Вам нужен либо компонент, который умеет выполнять именно скрипты, либо используйте isql любым доступным способом.
← →
kaif (2003-12-01 16:04) [9]Ты спокойно можешь выполнить из IBQuery или из IBSQL эту свою команду по созданию процедуры.
Единственное, что нужно сделать - призвоить свойству ParamCheck значение False. Иначе компонент пытается все места в тексте, где находит двоеточие, заменить символом вопроса и интерпретировать, как параметры SQL-запроса.
А все так называемые исполнители скриптов именно это и делают. Сначала разбивают скрипт на отдельные команды, а затем передают их на исполнение компоненту IBSQL или другому компоненту, способному отослать команду на сервер. Важно лишь, повторяю, отключить ParamCheck.
← →
BlackKing (2003-12-01 17:27) [10]Nu kak vsegda, kak tol"ko nashol, tak srazu otvet pojavljajetsja :o)
Vsjo ravno vsem Spasibo :o)
Imenno ParamCheck i portil vsju malinu.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c