Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA9: Непонятное поведение NULL в #-таблицах / 11 сообщений из 11, страница 1 из 1
12.04.2008, 12:01
    #35251283
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
Имеется процедура, написанная и скомпилированная в Sybase Central. В ней создается временная таблица:

Код: plaintext
1.
CREATE TABLE #p (iddocmove VARCHAR( 40 ), datewhen DATETIME, idclass INTEGER, qty INTEGER, price NUMERIC( 14 , 4 ), currqty INTEGER, idvalut INTEGER)

ну и дальше по ходу в эту таблицу идут вставки/апдейты (строится отчет).

Всё было нормально пока я не перекомпилил процедуру не централом а из Aqua Data Studio.

В результате при ее выполнении прилетело совершенно неожиданное сообщение:

автор
>[Error] Script lines: 1-10 -------------------------
ASA Error -195: Column 'idclass' in table '#p' cannot be NULL


Написал в лоб:

Код: plaintext
1.
CREATE TABLE #p (iddocmove VARCHAR( 40 ), datewhen DATETIME, idclass INTEGER NULL, qty INTEGER, price NUMERIC( 14 , 4 ), currqty INTEGER, idvalut INTEGER)

После чего процедура заработала. Выходит - при компиляции процедуры из централа создаваемые в ней #-таблицы получают для своих полей атрибут NULL, а из Aqua Data Studio - NOT NULL.
Но ведь компиляцией занимается сервер, а не клиентская тулза... это как это так может происходить?
...
Рейтинг: 0 / 0
13.04.2008, 00:35
    #35251671
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
имхо, дело в set-ах, которые выставляет клиентский софт
...
Рейтинг: 0 / 0
13.04.2008, 09:48
    #35251773
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
komradимхо, дело в set-ах, которые выставляет клиентский софт

Я догадываюсь - но где ж этот сет который управляет правилами создания #-таблиц?
...
Рейтинг: 0 / 0
13.04.2008, 15:51
    #35251950
ansinull
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
set ansi null
...
Рейтинг: 0 / 0
14.04.2008, 12:31
    #35253143
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
Неа, для ASA это опция - ALLOW_NULLS_BY_DEFAULT
...
Рейтинг: 0 / 0
14.04.2008, 14:57
    #35253668
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
morisНеа, для ASA это опция - ALLOW_NULLS_BY_DEFAULT

О, уже свет забрезжил :) В случае с Aqua Data Studio, там работа идет через JDBC - куда и как это скормить? Очень хочется перейти с централа для ковыряния в процедурах на акву ибо у нее эргономика на порядок лучше :)
...
Рейтинг: 0 / 0
20.04.2008, 13:48
    #35266884
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
Дело в том, что Aqua Data Studio коннектится к базе через jConnect. Рассмотрим, что происходит при установлении подключения.

При любом способе коннекта к ASA вызывается так называемая LOGIN_PROCEDURE . По умолчанию в качестве LOGIN_PROCEDURE вызывается процедура sp_login_environment , которая определена в системе так:
Код: plaintext
1.
2.
3.
4.
5.
CREATE PROCEDURE dbo.sp_login_environment()
BEGIN
  IF connection_property('CommProtocol')='TDS' THEN
    CALL dbo.sp_tsql_environment()
  END IF
END

Имеющаяся в ее тексте проверка connection_property('CommProtocol')='TDS' для Aqua Data Studio (jConnect) срабатывает (а для подключения Central'ом через ODBC - нет), и в результате вызывается еще одна стандартная процедура sp_tsql_environment , которая устанавливает опции БД так, чтобы приблизить поведение ASA к ASE:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE dbo.sp_tsql_environment()
BEGIN
  ...
  SET TEMPORARY OPTION ALLOW_NULLS_BY_DEFAULT='OFF';
  SET TEMPORARY OPTION FLOAT_AS_DOUBLE='ON';
  SET TEMPORARY OPTION ON_TSQL_ERROR='CONTINUE';
  SET TEMPORARY OPTION ISOLATION_LEVEL='1';
  ...
END

В частности, опция ALLOW_NULLS_BY_DEFAULT задает, что при отсутствии явной спецификации все столбцы создаются как not null (как в перманентных, так и во временных таблицах).

Для решения вашей задачи и приведения настроек при запуске через ADS к обычным можно изменить LOGIN_PROCEDURE на свою собственную (которую можно оставить просто пустой):
Код: plaintext
1.
set option PUBLIC.LOGIN_PROCEDURE='DBA.my_own_login_procedure'
go
...
Рейтинг: 0 / 0
21.04.2008, 14:55
    #35268601
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
A.K.
Для решения вашей задачи и приведения настроек при запуске через ADS к обычным можно изменить LOGIN_PROCEDURE на свою собственную (которую можно оставить просто пустой):
Код: plaintext
1.
set option PUBLIC.LOGIN_PROCEDURE='DBA.my_own_login_procedure'
go


это персистентно? то есть будучи однажны заменено, во всех дальнейших сессиях (и после перезапуска сервера) я буду уже иметь дело с подмененной логин-процедурой?
...
Рейтинг: 0 / 0
21.04.2008, 17:14
    #35269257
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
Да, перманентно.
...
Рейтинг: 0 / 0
21.04.2008, 17:17
    #35269269
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
A.K.Да, перманентно.

Большое спасибо. картина прояснилась.
...
Рейтинг: 0 / 0
21.04.2008, 17:49
    #35269433
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9: Непонятное поведение NULL в #-таблицах
Vladimir KozlovБольшое спасибо. картина прояснилась.
Я год назад точно таким же вопросом задавался, начав работать с Aqua'ой. Хотя в принципе в BOL все разъяснено - надо только найти, где :)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA9: Непонятное поведение NULL в #-таблицах / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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