Текущее время: Пн, авг 04 2025, 19:01

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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