Текущее время: Сб, июл 26 2025, 10:17

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: обработка ошибок Native SQL
СообщениеДобавлено: Чт, янв 24 2008, 09:39 
Начинающий
Начинающий

Зарегистрирован:
Чт, янв 24 2008, 09:26
Сообщения: 4
Всем привет! Есть некоторые проблемы с обработкой ошибок, возвращаемых внешней базой MS SQL 2000.
Для работы с базой используем такие конструкции:

TRY.

EXEC SQL.
EXEC :l_ok = [DMT_set_Agent] :l_plmid, '1', :l_fullnam, :l_shname,
:l_pref, :l_lgort, ''
ENDEXEC.

CATCH CX_SY_NATIVE_SQL_ERROR INTO exc_ref.
error_text = exc_ref->get_text( ).
p_ok = 1.
exit.
ENDTRY.

Все работает замечательно, кроме одного НО. Не могу получить текст сообщения об ошибке, возвращаемого сервером СУБД.
Т.е. в error_text пишется что-то вроде "Возникла ошибка при выполнении SQL команды". А мне необходимо получить сообщение от сервера.
В принципе, тексты ошибок возвращаемых сервером можно потом прочитать в транзакции SM21, но от этого радости мало. Я так понимаю, там сообщения берутся из файлов лога SAP, что было бы очень неудобно обрабатывать при каждом вызове хранимых процедур.

Кто-нибудь знает способ сразу обработать ошибку SQL и получить сообщение возвращаемое сервером?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка ошибок Native SQL
СообщениеДобавлено: Чт, янв 24 2008, 09:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
бурхан написал(а):
Т.е. в error_text пишется что-то вроде "Возникла ошибка при выполнении SQL команды".

А система юникодная?
В неюникодной после этого текста через двоеточие пишется сообщение сервера в неправильной кодировке.

Чтобы перекодировать, можно сделать так:
Code:
METHOD if_message~get_text .
"""""""""""""""""""""""""""""""""""""""""$"$\SE:(1 )\TY:CX_ROOT\IN:IF_MESSAGE\ME:GET_TEXT\SE:BEGIN\EI                                                                                             D
*$*$-Start: (1 )--------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  ZSQLERR_CODEPAGE_CONVERT.    "active version
data: class_name(200)
    , sql_err type ref to CX_SY_NATIVE_SQL_ERROR.
    .
class_name = cl_abap_classdescr=>get_class_name( me ).
if class_name = '\CLASS=CX_SY_NATIVE_SQL_ERROR'.
  sql_err ?= me.
  field-symbols: <c> type c.
  data: sql_msg(500)
      , conv_x2x  type ref to CL_ABAP_CONV_X2X_CE
      , buf(1024) type x
      .
  assign buf to <c> casting.
  <c> = sql_err->SQLMSG.
  conv_x2x = cl_abap_conv_x2x_ce=>create(
        in_encoding = '1504' out_encoding = '1500' input = buf ).
  conv_x2x->convert_c( ).

  buf = conv_x2x->get_out_buffer( ).
  result = <c>.
  concatenate 'Ioeaea Native SQL:' result into result separated by ' '.
  return.

endif.
ENDENHANCEMENT.
*$*$-End:   (1 )--------------------------------------------------------------------------------$*$*
  CALL METHOD cl_message_helper=>get_text_for_message
    EXPORTING
      text   = me
    RECEIVING
      result = result.
ENDMETHOD.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, янв 24 2008, 10:28 
Начинающий
Начинающий

Зарегистрирован:
Чт, янв 24 2008, 09:26
Сообщения: 4
Спасибо за помошь, однако SAP так просто не сдается :-)

Система вроде бы неюникодная, однако после двоеточия ничего нет. Просто текст "Возникла SQL-ошибка при выполнении команды Native SQL." и все.

Предложенный код что-то вообще не заработал. Он для какой версии? У нас 620 версия.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, янв 24 2008, 10:30 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
бурхан написал(а):
Предложенный код что-то вообще не заработал. Он для какой версии? У нас 620 версия.

Код для 7-го базиса. Там реализована неявная точка расширения в методе стандартного класса исключений.

Попробуйте вместо exc_ref->get_text( ) написать exc_ref->SQLMSG.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, янв 24 2008, 10:38 
Начинающий
Начинающий

Зарегистрирован:
Чт, янв 24 2008, 09:26
Сообщения: 4
sibrin написал:
Код для 7-го базиса. Там реализована неявная точка расширения в методе стандартного класса исключений.


Т.е. мне оно не поможет?

Из того что сразу вылезло:
У меня в классе CX_SY_NATIVE_SQL_ERROR нету атрибута SQLMSG
и в классе cl_message_helper нет метода get_text_for_message


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, янв 24 2008, 10:43 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
бурхан написал(а):
У меня в классе CX_SY_NATIVE_SQL_ERROR нету атрибута SQLMSG

Ну, тут уже ничего не поможет.
Может в 6.20 какие-нибудь другие механизмы есть...


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB