Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Конвертация процедур при выполнении / 9 сообщений из 9, страница 1 из 1
19.05.2008, 13:34
    #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
19.05.2008, 18:00
    #35321618
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация процедур при выполнении
опция preserve_source_format
...
Рейтинг: 0 / 0
30.05.2008, 12:43
    #35345562
Isilion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация процедур при выполнении
Выставил опцию в On, а всё равно при дебаге меняется процедура.
Код: plaintext
select * from SYS.SYSPROCEDURE where PROC_NAME = 'XXX' and USER_NAME(CREATOR) = 'YYY';
Показывает что в Source действительно храниться тот код что я писал, но в proc_defn лежит неверный код.
...
Рейтинг: 0 / 0
30.05.2008, 17:40
    #35346441
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация процедур при выполнении
Что значит "при дебаге меняется процедура"? При каком дебаге? Чем дебажишь то?
Sybase Central будет использовать текст процедуры из Source если он там есть (если процедура была создана при включенной опции preserve_source_format). При выключенной - поле source будет пустое и Централ будет брать текст для дебаггера из proc_defn.
...
Рейтинг: 0 / 0
02.06.2008, 09:42
    #35348253
Isilion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация процедур при выполнении
Дебажу тем-же Sybase Central'ом.
Настройка включена, поле Source содержит исходный код.

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

Эта неясность мне не нравится, мне не хочется писать процедуру на одном диалекте, подразумевая потенциальные ошибки неправильного конвертирования на другой диалект.
...
Рейтинг: 0 / 0
02.06.2008, 17:18
    #35349661
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация процедур при выполнении
IsilionПри просмотре Sybase Central верный код, но работает эта процедура не так как нужно.
При включении дебага, видно что выполняется сконвертированный код, причем сконвертированный неверно.Пересоздать процедуру пробовал? Вот прямо сейчас, перед очередной попыткой дебага?
...
Рейтинг: 0 / 0
03.06.2008, 14:33
    #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
03.06.2008, 17:56
    #35352038
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация процедур при выполнении
Oleg1Если в процедуре встречается хоть одина TSQL-конструкция, вся процедура переконвертируется в TSQLВообще-то, там немножко другой алгоритм распознавания диалектов. Не "хоть одна", а "первая уникальная для диалекта".
И вообще, читать в BOL раздел: SQL Anywhere® Server - SQL Usage > Other SQL Dialects
Там много любопытного есть...
...
Рейтинг: 0 / 0
04.06.2008, 12:29
    #35353685
Isilion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация процедур при выполнении
Хм, действительно. Так и есть.
Спасибо большое.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Конвертация процедур при выполнении / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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