Текущее время: Вс, июл 27 2025, 21:05

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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