Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
1-29366
hyper_omsk
2004-01-29 10:38
2004.02.10
Файл ресурса


3-29233
Vitalik
2004-01-19 14:30
2004.02.10
Добавление строк в таблицу ч/з DBGrid


1-29369
rel_
2004-01-29 10:55
2004.02.10
TEdit - курсор


1-29433
Maxximusss
2004-01-31 12:06
2004.02.10
Smart use SaveDialog


3-29246
Степан
2004-01-19 12:03
2004.02.10
Компонент TQRPreview





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский