Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизПрисвоение параметру ХП значения Найти похожие ветки
← →
Nick-From (2004-01-16 00:41) [0]Кусок ХП:
Так компилится:
WHEN SqlCode -901 DO
BEGIN
result = -901;
END
Как правильно записать такое: (не нравится SqlCode - не хочет компилиться)?
WHEN ANY DO
BEGIN
result = SqlCode;
END
← →
kaif (2004-01-16 01:12) [1]А что WHEN можно использовать в ХП? Что вообще имеется в виду? И что за result такой?
← →
Nick-From (2004-01-16 01:36) [2]Да, WHEN можно использовать в ХП :)
Result - возвращает на клиент код ошибки ХП (если они были)
Я знаю, что есть способ проще:
try
pFIBTransaction1.StartTransaction;
pFIBQuery1.ExecProcedure("SP",[1]);
except
on e: EFIBError do
case e.IBErrorCode of
335544345: showmessage("Ошибка захвата данных!");
end
end;
Сама процедура:
CREATE PROCEDURE SP
(
aSupplierId INTEGER
)
RETURNS
(
ErrorCode INTEGER
)
AS
BEGIN
UPDATE Suppliers S
SET S.S_Id = S.S_Id
WHERE S.S_Id = :aSupplierId;
ErrorCode = 0;
WHEN ANY DO
BEGIN
ErrorCode = SqlCode;
END
END^
← →
kaif (2004-01-16 02:03) [3]Интересно. Но под WHEN наверное, событие должно быть какое-то (EVENT). Что-то я смутно припоминаю. Но посмотрел в Language Reference - вообще на WHEN ничего нет...
В общем, я не в курсе. А без WHEN попробуй ErrorCode присвоить. Работает?
← →
kaif (2004-01-16 02:11) [4]Блин, я точно слепой. Нашел, конечно.
WHEN … DO
Error-handling statement that performs the statements following DO when the specified
error occurs. Available in triggers and stored procedures.
Syntax WHEN {< error> [, <error> …] | ANY}
DO < compound_statement>
< error>=
{EXCEPTION exception_name | SQLCODE number | GDSCODE errcode}
Argument Description
EXCEPTION exception_name The name of an exception already in the database
SQLCODE number An SQLCODE error code number
GDSCODE errcode An InterBase error code number
ANY Keyword that handles any of the above types of errors
compound_statement Statement or block executed when any of the specified errors occur.
Я так понимаю, что нужно написать:
WHEN -901 DO
BEGIN
//действия
END
← →
Nick-From (2004-01-16 12:06) [5]Не, так не будет работать, нужно так
WHEN SqlCode/GdsCode -901/335544345 DO
BEGIN
//действия
END
Так вот вопрос немного в другом: нужно в выходном параметре ErrorCode получать код SqlCode/GdsCode, а выражение ErrorCode = SqlCode; компилятор не пропускает.
Как быть?
Но как я уже понял, на клиенте ловить ошибки гораздо проще :)
← →
Digitman (2004-01-16 12:12) [6]
> не нравится SqlCode - не хочет компилиться
странно ..
в IB6 это ключ.слово должно распознаваться нормально ...
что говорит ? дословно ?
← →
Nick-From (2004-01-16 13:39) [7]Я ее компилю в IBExpert
Говорит следущее:
Invalid token. Dynamic SQL error. SQL error code = -104. Token unknown - line 18 char 17. SqlCode.
Типа он такого слова не знает, хотя жирным его выделяет и предлагает сам донабрать его при вводе первых трех-четырех символов (как в Delphi).
А где еще можно попробовать запустить эту ХП?
← →
Nick-From (2004-01-16 20:45) [8]вверх :)
← →
jack128 (2004-01-16 21:30) [9]Вот нормально компилиться
CREATE PROCEDURE NEW_PROCEDURE
RETURNS (
ERR_CODE INTEGER)
AS
begin
/* Procedure Text */
update addresses set addresses.name = "";
when any do
begin
err_code = sqlcode;
end
end
FB1.5 RC7
← →
Nick-From (2004-01-16 22:07) [10]А где компилил?
← →
jack128 (2004-01-16 22:08) [11]IBExpert
← →
VID (2004-01-16 23:48) [12]при попытке компиляции этой хп в IBExpert 2003.12.18
появляется предупреждение об ошибке парсера "Feature not supported", однако если проигнорировать это предупреждение, то хп успешно компилируется сервером yaffil_877.
Кстати, сообщение об ошибке появляется при попытке компиляции в окне редактора ХП, но если выполнить весь код ack128 © (16.01.04 21:30) [9] в окне SQL-редактора, как SQL-скрипт, то никих ошибок не возникает вообще, и молча создаётся новая ХП.
← →
jack128 (2004-01-16 23:55) [13]
> VID © (16.01.04 23:48) [12]
Этот означает, что версия сервера, указанная при регистрации базы, не соответствует реально установленному серверу
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c