|
|
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
Привет всем! Задача проста до безобразия - надо вытащить текущий Identity из Sequence для определенной таблицы. Sequence заранее не известен. Ктонить сталкивался с такой проблемой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 12:09 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
select last_number from user_sequences where sequence_name = 'YOUR_SEQ' только не понятно >Sequence заранее не известен неизвестно из какого seq-а генерится ключ для таблицы ? Посмотри триггер на инсерт или трассируй сессию с приложением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 12:21 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
2ora600 Надо адаптировать код который работает, на SQL для работы на оракле. Грубо говоря существует COM сервер транслирующий запросы на базу данных (в данном случае Insert) и возвращающий Identity. Если напрямую отображать MSSQL на Oracle, то известно все, кроме самого sequence... можно ли както программно решить этот трабл? Хотелось бы сменить просто провайдера с MicroSofta на ORACLE и чтобы это заработало, но получаем кучу мелких и не очень проблем :( Сам я к сожалению в Oracle пока не в зуб ногой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 12:35 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Ну и так далее:) Ты про это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 12:46 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
2 Denis Это надо в рамочку и в FAQ :-) только, чтоб уж совсем красиво >before insert or update on test before insert or update of test_id on test и >insert into test (name) >values ('name2') >return test_id into :test_id; returning test_id into :test_id; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:01 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
2Denis Popov: Близко, но: insert into test (name) values ('name2') return test_id into :test_id; Я не знаю как называется поле с Identity , т.е не знаю test_Id :( .... у меня тут мысль родилась - Может быть на этапе экспорта базы в Oracle создать тип объекта для каждой таблицы типа obj_TableName и в нем завести поле identity с идентификатором Sequence .... а потом если надо узнать identity, всегда можно поднять этот объект и узнать этот identity... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:11 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
У тебя есть первичный ключ в таблице, он состоит из поля с типом identity? Может быть тебе стоит сделат ьследующее: на каждую требуемую таблицу создать триггер, определять в нем значение первичного ключа, а с клиента после insert'а спрашивать текущее значение sequence: Код: plaintext 1. 2. подразумевая, что сработал триггер, в котором дернулся sequence. Учти, что currval ты имеешь право спрашивать тогда, когда хотя бы раз перед ним в сессии прошел nextval. В данном случае это произошло в триггере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:34 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
А почему бы взамен MSSQL-ой колонки identity не завести колонку с одинаковым для всех таблиц именем ( "ID" конечно же :-))) ) ? По большему счету и сиквенс может быть один на все таблицы. И получите то что хотите (насколько я понял) - унифицированный вид инсерта на любую таблицу с получением ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:41 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
2 ora600 только, чтоб уж совсем красиво >before insert or update on test before insert or update of test_id on test Замечательно !!! :(((( Только вопросец зачем update - первичный ключ ??? Если уж совсем грамотно и красиво ... то на мой скромный взгляд надо так before insert on test - и без указания полей так как первичный ключ обычно not null ... т.е вставлять его надо в любом случаи .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:47 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
2 Denis Popov Первичный ключ может состоять из нескольких полей 2 ora600 Исторически сложилось так что эти поля имеют свои названия, и куча кода их пользует... это было до меня и я ничего здесь исправить не могу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 13:48 |
|
||
|
Вытащить Identity
|
|||
|---|---|---|---|
|
#18+
2Alex_D >Замечательно !!! :(((( >Только вопросец зачем update - первичный ключ ??? А почему СТРОГО ЗАПРЕЩАЕТСЯ делать update tablename set test_id = null, ... where ... ? Насчет грамотности - представьте себя на месте кодера, правящего давно напИсанное монстроидальное приложение и встретившего такой апдейт. Кричать что ЭТО не правильно и пытаться переделать кучу кода (со вносом свеженьких багов, конечно же) или убедиться в наличии корректного триггера ? Как грамотнее ? >Если уж совсем грамотно и красиво ... >то на мой скромный взгляд надо так >before insert on test >- и без указания полей так как первичный ключ обычно not null ... >т.е вставлять его надо в любом случаи .... в before insert можно поля указывать ? первичный ключ ОБЫЧНО not null ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 14:50 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32123718&tid=1991395]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 479ms |

| 0 / 0 |
