powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Конвертация процедур при выполнении
9 сообщений из 9, страница 1 из 1
Конвертация процедур при выполнении
    #35320526
Isilion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sybase ASA 9.0.2

Не понимаю почему при выполнении процедур они выглядят совсем не так как я их писал, мало того что они конвертятся из Watcom-SQL в Transact-SQL, так ещё и не правильно конвертятся.

Пишу процедуру, проверяю - работает не правильно, решаю пробежаться в дебаге, а там совсем не то.

Вот такой кусок кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    case (@block_type)
        when  0  then
            if exists (select  1  from ITSIDBO.NOMENCLATURE_PLAN_CTC where CTC_ID = @ctc_id and NOM_ID = @nom_id) then
                select CTC_NOM_ID into @ctc_nom_id from ITSIDBO.NOMENCLATURE_PLAN_CTC where CTC = @ctc_id and NOM_ID = @nom_id;
                set @msg = ITSIDBO.ACL_OBJECT_LOCK_SET( 197 , @ctc_nom_id,  2000 , @current_user_id,  0 );
            end if;

        when  1  then
            select PUD_ID, "NUMBER" into @pud_id, @number from ITSIDBO.CTC where CTC_ID = @ctc_id;
            select first @msg = #TMP.MSG 
                    from (select ITSIDBO.ACL_OBJECT_LOCK_SET( 197 , CTC_NOM_ID,  2000 , @current_user_id,  0 ) as MSG 
                                from ITSIDBO.CTC
                                    join ITSIDBO.NOMENCLATURE_PLAN_CTC on NOMENCLATURE_PLAN_CTC.CTC_ID = CTC.CTC_ID
                                where NOMENCLATURE_PLAN_CTC.NOM_ID = @nom_id and CTC.PUD_ID = @pud_id and CTC.NUMBER = @number
                          ) as #TMP
                    where  #TMP.MSG <> '' order by	 1  asc;
    end case;
превращается в вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  if(@block_type) = 
   0 
    if exists(select  1  from ITSIDBO.NOMENCLATURE_PLAN_CTC where CTC_ID = @ctc_id and NOM_ID = @nom_id)
      begin
        select @ctc_nom_id = CTC_NOM_ID from ITSIDBO.NOMENCLATURE_PLAN_CTC where CTC = @ctc_id and NOM_ID = @nom_id
        set @msg=ITSIDBO.ACL_OBJECT_LOCK_SET( 197 ,@ctc_nom_id, 2000 ,@current_user_id, 0 )
      end
  else if(@block_type) = 
   1  begin
      select @pud_id = PUD_ID,@number = NUMBER from ITSIDBO.CTC where CTC_ID = @ctc_id
      select first @msg = #TMP.MSG from
        (select MSG=ITSIDBO.ACL_OBJECT_LOCK_SET( 197 ,CTC_NOM_ID, 2000 ,@current_user_id, 0 ) from
          ITSIDBO.CTC join
          ITSIDBO.NOMENCLATURE_PLAN_CTC on NOMENCLATURE_PLAN_CTC.CTC_ID = CTC.CTC_ID where
          NOMENCLATURE_PLAN_CTC.NOM_ID = @nom_id and CTC.PUD_ID = @pud_id and CTC.NUMBER = @number) as #TMP where
        #TMP.MSG <> '' order by  1  asc
    end
На лицо несоответствие if - else if оригиналым условиям и прочие косяки. Как заставить процедуру оставаться и выполняться в том виде, в котором она написана?
...
Рейтинг: 0 / 0
Конвертация процедур при выполнении
    #35321618
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опция preserve_source_format
...
Рейтинг: 0 / 0
Конвертация процедур при выполнении
    #35345562
Isilion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выставил опцию в On, а всё равно при дебаге меняется процедура.
Код: plaintext
select * from SYS.SYSPROCEDURE where PROC_NAME = 'XXX' and USER_NAME(CREATOR) = 'YYY';
Показывает что в Source действительно храниться тот код что я писал, но в proc_defn лежит неверный код.
...
Рейтинг: 0 / 0
Конвертация процедур при выполнении
    #35346441
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "при дебаге меняется процедура"? При каком дебаге? Чем дебажишь то?
Sybase Central будет использовать текст процедуры из Source если он там есть (если процедура была создана при включенной опции preserve_source_format). При выключенной - поле source будет пустое и Централ будет брать текст для дебаггера из proc_defn.
...
Рейтинг: 0 / 0
Конвертация процедур при выполнении
    #35348253
Isilion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дебажу тем-же Sybase Central'ом.
Настройка включена, поле Source содержит исходный код.

При просмотре Sybase Central верный код, но работает эта процедура не так как нужно.
При включении дебага, видно что выполняется сконвертированный код, причем сконвертированный неверно. ПРимер в самом первом сообщении был.

Эта неясность мне не нравится, мне не хочется писать процедуру на одном диалекте, подразумевая потенциальные ошибки неправильного конвертирования на другой диалект.
...
Рейтинг: 0 / 0
Конвертация процедур при выполнении
    #35349661
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IsilionПри просмотре Sybase Central верный код, но работает эта процедура не так как нужно.
При включении дебага, видно что выполняется сконвертированный код, причем сконвертированный неверно.Пересоздать процедуру пробовал? Вот прямо сейчас, перед очередной попыткой дебага?
...
Рейтинг: 0 / 0
Конвертация процедур при выполнении
    #35351383
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IsilionНе понимаю почему при выполнении процедур они выглядят совсем не так как я их писал, мало того что они конвертятся из Watcom-SQL в Transact-SQL, так ещё и не правильно конвертятся.Если в процедуре встречается хоть одина TSQL-конструкция, вся процедура переконвертируется в TSQL

Код: plaintext
1.
            select first @msg = #TMP.MSG 
Код: plaintext
1.
            select first #TMP.MSG into @msg
...
Рейтинг: 0 / 0
Конвертация процедур при выполнении
    #35352038
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg1Если в процедуре встречается хоть одина TSQL-конструкция, вся процедура переконвертируется в TSQLВообще-то, там немножко другой алгоритм распознавания диалектов. Не "хоть одна", а "первая уникальная для диалекта".
И вообще, читать в BOL раздел: SQL Anywhere® Server - SQL Usage > Other SQL Dialects
Там много любопытного есть...
...
Рейтинг: 0 / 0
Конвертация процедур при выполнении
    #35353685
Isilion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, действительно. Так и есть.
Спасибо большое.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Конвертация процедур при выполнении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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