Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Аналог IDENT_CURRENT для SyBase / 10 сообщений из 10, страница 1 из 1
04.04.2003, 14:31
    #32133641
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Привет всем, кто на форуме.
Кто нибудь знает существует ли для Sybase SQL Anywhere 7,
аналог IDENT_CURRENT(<имя таблицы>) из MS SQL Server.

Если нет, то каким образом можно получить последнее значение AUTOINCREMENT - ог столбца определённой таблицы, если при этом существует вероятность, что будет осуществлено добавление записей в другие таблицы БД, которые содержат AUTOINCREMENT - ые столбцы или сработают триггеры на изменение, которые потенциально изменяют значение глобальной переменной @@identity.

P.S.
Так же хотел бы узнать изменяется ли значение @@identity если осуществлять вставку, обновление или удаление данных в одной транзакции,
и получат ли пользователи из разных сессий свои корректные значения @@identity.
...
Рейтинг: 0 / 0
04.04.2003, 18:08
    #32133932
Victor Am
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Попробовал
Каждый пользователь в пределах своей сессии получает свой @@identity,
полученный после своих вставок в таблицы, и @@identity другой сесии не видит.
...
Рейтинг: 0 / 0
04.04.2003, 18:20
    #32133944
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
А, что на счёт изменения @@identity если на таблицу в которую вставляем запись висит триггер на Insert, и в этом треггере происходит запись в другую таблицу которая содержит AUTOINCREMENT(АЛЯ для логов)........???????
...
Рейтинг: 0 / 0
05.04.2003, 01:51
    #32134048
c127
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Итересный вопрос. Я думаю, что вернется идентити самой ближней (той, на которой триггер, а не в которую он добавляет записи) таблицы. Я проверял аналогичную ситуацию, когда в ближней таблице идентити не было, а в далней был. Согласно документации @@identity должен быть 0, так и было. Т.е. поведение такое, как будто дальней таблицы нет. Но нужно проверять.

@@identity в сайбейзе работает корректно, каждый пользователь видит свой. Единственная обнаруженная проблема (ASA7), это если добавлять в такую таблицу записи, не закрыть транзакцию и стазу удалять добавленную запись, то пока транзакция не закрыта, таблица блокируется. Вроде ничего не напутал. Но это явный баг, возможно его профиксили.
...
Рейтинг: 0 / 0
07.04.2003, 10:06
    #32134377
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Итересный вопрос. Я думаю, что вернется идентити самой ближней (той, на которой триггер, а не в которую он добавляет записи) таблицы. Я проверял аналогичную ситуацию, когда в ближней таблице идентити не было, а в далней был. Согласно документации @@identity должен быть 0, так и было. Т.е. поведение такое, как будто дальней таблицы нет. Но нужно проверять.

@@identity в сайбейзе работает корректно, каждый пользователь видит свой. Единственная обнаруженная проблема (ASA7), это если добавлять в такую таблицу записи, не закрыть транзакцию и стазу удалять добавленную запись, то пока транзакция не закрыта, таблица блокируется. Вроде ничего не напутал. Но это явный баг, возможно его профиксили.


Тригер какраз весит на той таблице в которую добавляется запись.
Но сам тригер пишет лог в другую таблицу в которой, так же есть AUTOINCREMENT - ый столбец(то есть column - identy), в следствии чего переменная @@identy - принимает значение последней добавленной записи в лог.
Короче ситуация такова:
FirstTable - таблица куда добавляем запись.
FirstTrigger - триггер Before Insert для FirstTable.
LogTable - таблица с логами.

ID_1 - AUTOINCREMENT - ый столбец в FirstTable.
ID_2 - AUTOINCREMENT - ый столбец в LogTable.

В SP осуществляем вставку в FirstTable:
Insert into FirstTable(Data) values(@Data)
id_new_record = @@identity
-- используем далеее значенние id_new_record

Так вот после такой вставки в id_new_record получается не последнее значение ID_1(что очень нужно), а последнее значение ID_2.

Так вот, если кто знает как всётаки решить такую проблемы буду очень благодарен, потому что вся работа встала из - за возникшей проблемы на ASA 7.

P.S.
Всем кто что-то пытается предложить огромное спасибо, пробую все возможные ситуации для ASA 7.
Странно всётаки почему специалисты SyBase, не хотят позаботиться о программистах и создать пару функций/процедур как в MS SQL Server или Oracle.
...
Рейтинг: 0 / 0
07.04.2003, 10:07
    #32134378
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Тригер какраз весит на той таблице в которую добавляется запись.
Но сам тригер пишет лог в другую таблицу в которой, так же есть AUTOINCREMENT - ый столбец(то есть column - identy), в следствии чего переменная @@identy - принимает значение последней добавленной записи в лог.
Короче ситуация такова:
FirstTable - таблица куда добавляем запись.
FirstTrigger - триггер Before Insert для FirstTable.
LogTable - таблица с логами.

ID_1 - AUTOINCREMENT - ый столбец в FirstTable.
ID_2 - AUTOINCREMENT - ый столбец в LogTable.

В SP осуществляем вставку в FirstTable:
Insert into FirstTable(Data) values(@Data)
id_new_record = @@identity
-- используем далеее значенние id_new_record

Так вот после такой вставки в id_new_record получается не последнее значение ID_1(что очень нужно), а последнее значение ID_2.

Так вот, если кто знает как всётаки решить такую проблемы буду очень благодарен, потому что вся работа встала из - за возникшей проблемы на ASA 7.

P.S.
Всем кто что-то пытается предложить огромное спасибо, пробую все возможные ситуации для ASA 7.
Странно всётаки почему специалисты SyBase, не хотят позаботиться о программистах и создать пару функций/процедур как в MS SQL Server или Oracle.
...
Рейтинг: 0 / 0
07.04.2003, 13:32
    #32134670
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Всем огромное спасибо, кто пытался чем нибудь помочь.
Проблеме решена.
Тему - закрываю.
...
Рейтинг: 0 / 0
07.04.2003, 23:45
    #32135207
c127
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Расскажи как решил? Ситуация типичная, может пригодится.
...
Рейтинг: 0 / 0
08.04.2003, 09:08
    #32135297
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Решение.
В тупую - так как универсального выхода оказалось, что нет и в ближайшем будущем скорее не предвидится(судя по официальной документации на SyBase), но я буду искать его.
Короче:
1) Заменил AUTOINCREMENT - ый столбец в LogTable, на Max(ID_2) + 1.
2) Ужесточил порядок операций вставки и обновления в SP и Trigger - ах, таким образом, чтобы они не влияли на столбцы identity - во всех таблицах(ух и пришлось повозиться в Debuggere).
3) Выразил благодарность тех.поддержки SyBase в России.

P.S.
Решение не конкретное, так как оно будет сильно зависить от физ.модели БД и её логической структуры.
...
Рейтинг: 0 / 0
08.04.2003, 20:08
    #32136135
c127
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IDENT_CURRENT для SyBase
Да, я понял. Похоже есть проблема.

Вот только что нашел в документации.
When an insert causes referential integrity actions or fires a trigger, @@identity behaves like a stack. For example, if an insert into a table T1 (with an identity or autoincrement column) fires a trigger that inserts a row into table T2 (also with an identity or autoincrement column), then the value returned to the application or procedure which carried out the insert is the value inserted into T1.

Если так не работает, то это баг. Тогда ничего более умного, чем поставить последний бак фикс, я придумать не могу.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Аналог IDENT_CURRENT для SyBase / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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