Текущее время: Чт, июл 31 2025, 08:56

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Open SQL
СообщениеДобавлено: Ср, июн 18 2008, 21:18 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 07 2007, 18:07
Сообщения: 22
Дали править программу одного программиста, которого прогнали за плохую работу. Думают, я буду лучше ;)

И вот в числе других перлов вижу я такой абзац:

delete zpp_table from table gt_tab.
commit work and wait.


insert zpp_table from table gt_table.
commit work and wait.

gt_tab и gt_table - interne Tabellen
zpp_table - DB Tabelle

В gt_tab и gt_table данные почти одни и те же.
На строчке insert... программа дает думп, и данные при этом теряются, т.е. стираются, а обратно в таблицу не записываются. Что вызывает справедливый гнев клиентов.
В тексте думпа написано, что программа прерывается оттого, что insert пытается вставить в таблицу строчки, которые в ней уже есть. Т.е. после исполнения delete , несмотря на то, что данных в таблице уже нет, САП реагирует так, как будто они еще есть, и не допускает исполнения insert .

Вопрос: как исправить ошибку?

Спасибо за ответы. :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 18 2008, 21:28 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Проверьте табличку gt_table до insert. Скорее всего дублирующие записи в ней.

ЗЫ А код вроде прально написан. После первого commit табличка должна очиститься, после второго - заполниться.

ЗЗЫ Да и таблички gt_tab и gt_table должны быть одной структуры.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 18 2008, 21:41 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 07 2007, 18:07
Сообщения: 22
John Doe написал:
Проверьте табличку gt_table до insert. Скорее всего дублирующие записи в ней.

ЗЫ А код вроде прально написан. После первого commit табличка должна очиститься, после второго - заполниться.

ЗЗЫ Да и таблички gt_tab и gt_table должны быть одной структуры.


Нет, в gt_table нет дублей. В ключевых полях есть поле Текущий номер, который перед записью обновляется, специально, чтобы избежать одинаковых записей.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 18 2008, 21:54 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 07 2007, 18:07
Сообщения: 22
Если между delete и insert поставить break-point, или при выполнении программы в debugging-режиме, дампа не происходит никогда. Он происходит не всегда, чаще при больших размерах стираемой и записываемой таблиц, в продуктивной системе чаще, чем у меня в разработке (продуктивная система быстрее). Все это наводит на мысль, что процесс стирания продолжается после commit work, или где-то, помимо ДБ таблицы, записи числятся еще не стертыми, и эта инстанция не дает совершиться insert.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 18 2008, 23:25 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Поэкспериментируйте. Сделайте в серединке вызов DB_COMMIT, либо попробуйте использовать UPDATE TASK.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 19 2008, 06:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
al1000 написал(а):
Он происходит не всегда, чаще при больших размерах стираемой и записываемой таблиц

Вот в том-то и дело, что при большом объёме Вы и не замечаете дубликатов.

John Doe написал:
Сделайте в серединке вызов DB_COMMIT

А commit work между delete и insert, кстати, вовсе не нужен. :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 19 2008, 07:34 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Точно! Не нужен... Это все футбол виноват :lol:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 19 2008, 07:54 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
al1000 написал(а):
Нет, в gt_table нет дублей.

Если строчки просто целиком задваиваются (или если есть 100% уверенность, что они не задваиваются :) ), то можно сделать быструю заплатку:
Code:
insert zpp_table from table gt_table ACCEPTING DUPLICATE KEYS.

пока не разобрались в чём дело.

Если же строки с разными данными имеют один ключ, то уже необходимо лечить причину, а не симптомы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 19 2008, 17:44 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 07 2007, 18:07
Сообщения: 22
John Doe написал:
Поэкспериментируйте. Сделайте в серединке вызов DB_COMMIT, либо попробуйте использовать UPDATE TASK.


В серединке чего? Извините, не понял.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 19 2008, 17:49 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 07 2007, 18:07
Сообщения: 22
sibrin написал:
al1000 написал(а):
Он происходит не всегда, чаще при больших размерах стираемой и записываемой таблиц

Вот в том-то и дело, что при большом объёме Вы и не замечаете дубликатов.

John Doe написал:
Сделайте в серединке вызов DB_COMMIT

А commit work между delete и insert, кстати, вовсе не нужен. :)


В записываемой таблице не может быть дубликатов. Одно ключевое поле представляет собой Порядковый номер. Перед записью таблица сортируется и нумерируется заново, так что порядковый номер не повторяется. А вот в стираемой и записываемой таблице вполне могут быть одинаковые записи.

Хм, может и правда commit work убрать? Спасибо за идею, завтра попробую.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 19 2008, 17:52 
Начинающий
Начинающий

Зарегистрирован:
Вт, авг 07 2007, 18:07
Сообщения: 22
sibrin написал:
al1000 написал(а):
Нет, в gt_table нет дублей.

Если строчки просто целиком задваиваются (или если есть 100% уверенность, что они не задваиваются :) ), то можно сделать быструю заплатку:
Code:
insert zpp_table from table gt_table ACCEPTING DUPLICATE KEYS.

пока не разобрались в чём дело.

Если же строки с разными данными имеют один ключ, то уже необходимо лечить причину, а не симптомы.


Строки с разными, и даже с одинаковыми данными всегда имеют разный ключ.

А если вместо insert modify попробовать? Попробую завтра, о результатах напишу.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB