Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Проблема множественной вставки в несколько таблиц и создания ключа  [new]
PaxExterminatus
Member

Откуда:
Сообщений: 15
INSERT ALL
  WHEN FLAG_CREATE_STREAM = 1 THEN
  INTO EMSG_STREAM VALUES (EMSG_STREAM_SEQ.NEXTVAL, EMSG_CAUSE, NULL, CLIENT_ID)
  WHEN FLAG_CREATE_STREAM > 0 THEN
  INTO EMSG VALUES (EMSG_STREAM_SEQ.CURRVAL, EMSG_SEQ.NEXTVAL, EMSG_TYPE, EMSG_TYPE_SUB, EMSG_DATE, EMSG_ADDRESS, EMSG_BODY, EMSG_STATUS)

SELECT...


ORA-02291: integrity constraint (FK_EMSG_STREAM) violated - parent key not found

Можно ли как-то решить эту проблему малой кровью?
16 фев 17, 18:21    [20218962]     Ответить | Цитировать Сообщить модератору
 Re: Проблема множественной вставки в несколько таблиц и создания ключа  [new]
PaxExterminatus
Member

Откуда:
Сообщений: 15
Алгоритм примерно такой,

для каждого первого EMSG создать STREAM, для последующих использовать ранее созданный STREAM
16 фев 17, 18:24    [20218967]     Ответить | Цитировать Сообщить модератору
 Re: Проблема множественной вставки в несколько таблиц и создания ключа  [new]
PaxExterminatus
Member

Откуда:
Сообщений: 15
Получается что запрос создает вот это:
EMSG_STREAM STREAM_CAUSE USER_ID CLIENT_ID
50 1 (null) 1339023


EMSG_STREAM EMSG EMSG_TYPE
50 378961
51 37897 2
16 фев 17, 18:38    [20219018]     Ответить | Цитировать Сообщить модератору
 Re: Проблема множественной вставки в несколько таблиц и создания ключа  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27380
Счётчик инкрементируется для каждой строки запроса. Так они работают. И это задокументировано.
16 фев 17, 18:44    [20219029]     Ответить | Цитировать Сообщить модератору
 Re: Проблема множественной вставки в несколько таблиц и создания ключа  [new]
PaxExterminatus
Member

Откуда:
Сообщений: 15
, SEQ AS ( 

SELECT
  msg.EMSG_TYPE,
  msg.CLIENT_ID,
  ROW_NUMBER() OVER (PARTITION BY msg.CLIENT_ID ORDER BY msg.CLIENT_ID, msg.EMSG_TYPE) GRNUM
FROM 
  MSG_LIST msg,
  CLIENT_PROPERTY cp
WHERE msg.CLIENT_ID = cp.CLIENT_ID
)


SELECT 
  CLIENT_ID,
  GRNUM,
  CASE WHEN GRNUM = 1 THEN EMSG_STREAM_SEQ.NEXTVAL
       ELSE EMSG_STREAM_SEQ.NEXTVAL - GRNUM + 1
  END AS SSS
  
FROM SEQ
16 фев 17, 19:13    [20219126]     Ответить | Цитировать Сообщить модератору
 Re: Проблема множественной вставки в несколько таблиц и создания ключа  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27380
PaxExterminatus, поток сознания лучше переместить в другое место
16 фев 17, 19:33    [20219169]     Ответить | Цитировать Сообщить модератору
 Re: Проблема множественной вставки в несколько таблиц и создания ключа  [new]
PaxExterminatus
Member

Откуда:
Сообщений: 15
Elic, зато работает, а вам советую негатив в другое место переместить
16 фев 17, 20:00    [20219232]     Ответить | Цитировать Сообщить модератору
 Re: Проблема множественной вставки в несколько таблиц и создания ключа  [new]
хунтер
Guest
PaxExterminatus
Elic, зато работает, а вам советую негатив в другое место переместить


До поры до времени.
Приходите еще и расскажете нам в каком месте еще что то поламалось,
нам будет очень интересно :)
16 фев 17, 21:03    [20219391]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить