![]() |
|
Модераторы: LSD |
![]()
|
|
| killerbean |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 18.5.2006 Репутация: нет Всего: нет |
Есть 2 таблици:
Requests ------------- req_code req_name ... request_items ------------- ri_code req_code fi_name ... связанные по req_code. Они должны заполняться следующим образом: BeginTransaction insert into Requests ..... insert into Request_items ..... EndTransaction Суть проблемы следующая: если в табл. Requests я запись могу добавить без проблем, то для добавления в Request_items мне необходимо знать req_code последней записи внесенной в табл. Requests. Как его(Requests.req_code) можно определить, ведь до фиксации транзакции данные в таблицу не занесуться? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
1. Данные в таблицу будут вставлены и до завершения транзакции, только они будут видимы только для этой транзакции.
2. А как ты гененируешь req_code, что сам не можешь узнать его? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| killerbean |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 18.5.2006 Репутация: нет Всего: нет |
1. Значить мне тогда надо считать данные из последней вставленой записи. Тогда вопрос как обратиться именно к нужной мне записи?
2. req_code генерирую не я а Oracle через sequence. |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Тебе видней какая именно запись тебе нужна. Генерируй req_code сам, вначале:
а потом уже INSERT. Или напиши процедуру, которая вставляла бы записи в Requests и возвращала через returning сгенерированный req_code. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| killerbean |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 18.5.2006 Репутация: нет Всего: нет |
Ну я делаю insert и и сразу же мне нужно получить код этой записи, а потом запросом
вставить в табл. request_items, где на месте ...... должен определяться номер записи. Как его определить? Это сообщение отредактировал(а) killerbean - 11.9.2006, 12:18 |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Я тебе уже объяснил, надо или предварительно генерировать значение ключа. Или получать сгенерированное значение ключа, это можно сделать в PL/SQL, и вроде ODAC еще так умеют.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| killerbean |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 18.5.2006 Репутация: нет Всего: нет |
А как можно получить значение сгенерированого ключа в PL/SQL?
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| killerbean |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 18.5.2006 Репутация: нет Всего: нет |
такой вариант не получилось реализовать. Пробую запрсом:
по ходу в последней записи должен лежать тот REQ_CODE, что мне надо. Но там лежит код последней добавленной записи до начала транзакции. Как это можно объяснить? И можно ли както это обойти |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Вот только не надо извращений с SCN. У sequence есть две псевдоколонки currval и nextval, используй уж лучше currval для получения последнего сгенерированного в данной сессии значения.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| killerbean |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 18.5.2006 Репутация: нет Всего: нет |
пробовал. Если использую CURRVAL
вылетает следующая ошибка
если NEXTVAL
то результат такой
и кто же из них NEXTVAL? |
||||||||
|
|||||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
В первом insert-е используешь nextval, а во втором insert-е currval. Главное следить, чтобы между этими двумя insert-ами не вклинилось обращение к этому sequence-у.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| killerbean |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 18.5.2006 Репутация: нет Всего: нет |
мне кажеться в Delphi я могу реализовать следующим образом:
1. select REQUESTS_SEQ.NEXTVAL as "Ключ" from REQUESTS 2. Сохранить значение "Ключ" в переменную 3. Выполнить первый insert, что позволит присвоить новой записи значение, которое я сохранил в переменную 4. Выполнить второй insert, где я подставлю свою переменную но после выполнения п.1 я получаю не значение а набор значений. Как с этим быть. Если бы я получил одно значение, то проблем бы небыло |
|||
|
||||
| batigoal |
|
||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 2 Всего: 151 |
А за чем ты делаешь этот SELECT? Так ты получишь его столько раз, сколько у тебя записей в таблице. Если уж хочешь сделать это запросом, тогда можно так:
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Я тебе про этот способ еще во втором посте писал.
1.
и далее по списку. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |