powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как подавить ошибку выдаваемую сервером?
6 сообщений из 6, страница 1 из 1
Как подавить ошибку выдаваемую сервером?
    #32851622
Diaflex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В хранимку передаю строку, которая содержит что-то типа "15*27.7747 + 300"
затем exec('insert tab_name (money_fld) values ('+ @Param+')'). Если строка содержит невычислимое значение, то пользователю выводится ошибка. Вопрос - как подавить ошибку? или м.б. есть функция/хранимка которая проверяет, а является ли строка вычислимым значением?

P.S. в начале выполняю проверку
if patindex('%[^ -+*/0123456789.]%', @Param) != 0
return 1
однако в строке могут быть синтаксические ошибки...
...
Рейтинг: 0 / 0
Как подавить ошибку выдаваемую сервером?
    #32851672
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DiaflexВ хранимку передаю строку, которая содержит что-то типа "15*27.7747 + 300"
затем exec('insert tab_name (money_fld) values ('+ @Param+')'). Если строка содержит невычислимое значение, то пользователю выводится ошибка. Вопрос - как подавить ошибку? или м.б. есть функция/хранимка которая проверяет, а является ли строка вычислимым значением?

P.S. в начале выполняю проверку
if patindex('%[^ -+*/0123456789.]%', @Param) != 0
return 1
однако в строке могут быть синтаксические ошибки...
Надо думать пользователь не в ISQL работает и ошибка у него выскакивает в клиентском приложении :) Отсюда вывод - нужно думать в сторону подавления ошибки на клиентском приложении и задать этот вопрос на форуме, соотвествующему инструменту, на котором оно писано.

P.S. Если конечно указывать наименование СУБД и ее номер билда, то возможно окажется, что ошибки можно и в ХП подавлять, однако при таком вот подавлении само клиентское приложение не особо узнает о том, что произошла ошибка.
...
Рейтинг: 0 / 0
Как подавить ошибку выдаваемую сервером?
    #32851992
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, имеется в виду ASE...

DiaflexВ хранимку передаю строку, которая содержит что-то типа "15*27.7747 + 300"
затем exec('insert tab_name (money_fld) values ('+ @Param+')'). Если строка содержит невычислимое значение, то пользователю выводится ошибка. Вопрос - как подавить ошибку?


Никак. Не выводить ее в клиентском приложении.

Diaflex
или м.б. есть функция/хранимка которая проверяет, а является ли строка вычислимым значением?


А что такое "вычислимое значение" ?
Можно послать "это" на сервер, предварив строкой "select "
, и если получешь ошибку синтаксиса , иди еще какую ошибку, то значит
не является. Впрочем на сервере при выполнении через EXEC() эффект примерно такой же.

Diaflex

P.S. в начале выполняю проверку
if patindex('%[^ -+*/0123456789.]%', @Param) != 0
return 1
однако в строке могут быть синтаксические ошибки...


Хочешь написать трансятор TransactSQL на самом Transact SQL ?
Я думаю, нет.

Однако ПРОСТЫХ путей вы там не ищите, как я понимаю.
И все для того , чтобы использовать сервер в качестве калькулятора ?
...
Рейтинг: 0 / 0
Как подавить ошибку выдаваемую сервером?
    #32852118
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DiaflexВ хранимку передаю строку, которая содержит что-то типа "15*27.7747 + 300"
затем exec('insert tab_name (money_fld) values ('+ @Param+')'). Если строка содержит невычислимое значение, то пользователю выводится ошибка. Вопрос - как подавить ошибку? или м.б. есть функция/хранимка которая проверяет, а является ли строка вычислимым значением?

P.S. в начале выполняю проверку
if patindex('%[^ -+*/0123456789.]%', @Param) != 0
return 1
однако в строке могут быть синтаксические ошибки...

Для ASA вполне работает вот такой код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create procedure calculate_it(formula text) ON EXCEPTION RESUME
begin
    create table #t(i integer null);
    execute immediate 'insert into #t(i) values(' || formula || ')';
    if SQLcode= -  131  then
        select 'error';
    else
        select * from #t;
    end if
end;
...
Рейтинг: 0 / 0
Как подавить ошибку выдаваемую сервером?
    #32852122
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl DiaflexВ хранимку передаю строку, которая содержит что-то типа "15*27.7747 + 300"
затем exec('insert tab_name (money_fld) values ('+ @Param+')'). Если строка содержит невычислимое значение, то пользователю выводится ошибка. Вопрос - как подавить ошибку? или м.б. есть функция/хранимка которая проверяет, а является ли строка вычислимым значением?

P.S. в начале выполняю проверку
if patindex('%[^ -+*/0123456789.]%', @Param) != 0
return 1
однако в строке могут быть синтаксические ошибки...

Для ASA вполне работает вот такой код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create procedure calculate_it(formula text) ON EXCEPTION RESUME
begin
    create table #t(i integer null);
    execute immediate 'insert into #t(i) values(' || formula || ')';
    if SQLcode= -  131  then
        select 'error';
    else
        select * from #t;
    end if
end;

Работать то он работает, но мне лично кажется иделогически неправильным. Взять хотя бедного клиента, к которому придет набор данных с целым или стринговым полем. Пусть уж лучше полностью ошибка на клиента передается, он при желании ее и распарсить сможет (да и просто показать, если русский язык сообщений на сервере включен).
...
Рейтинг: 0 / 0
Как подавить ошибку выдаваемую сервером?
    #32852173
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Работать то он работает, но мне лично кажется иделогически неправильным. Взять хотя бедного клиента, к которому придет набор данных с целым или стринговым полем. Пусть уж лучше полностью ошибка на клиента передается, он при желании ее и распарсить сможет (да и просто показать, если русский язык сообщений на сервере включен).
Ой! Ну если программист додумался поручить вычислять формулы серверу баз данных, то уж с вариационными резалт-сетами он как-нибудь разбереться? :)
Вся задача смахивает на извращение, но если уж сильно хочется - пусть делает :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как подавить ошибку выдаваемую сервером?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]