В общем не совсем оптимизация, но скажем так грабли с небольшой ручкой, проявились на системе 4.6 операционка HP-UX версии 11.31, база Oracle версия 10.хх с хвостиком, на системе где Oracle 9.xx с хвостиком такого эффекта не наблюдалось, так что скорее всего это похоже грабли от оракловой базы. И так что и как было.
1. Есть своя Z-табличка, есть свои программки, которые туда чего-то пишут, а другие чего-то читают. В какой-то момент надо было добавить поле, тип поля NUMC. Добавил поле, к примеру R_FILE TYPE MY_DATA, где в словаре определено как MY_DATA(5) TYPE n. Ясное дело таблицу переактивировал, через утилиту базы данных сделал адаптацию с сохранением значений.
2. Написал программку, которая для некоторых записей из таблички заполнила новое поле R_FILE нужными значениями.
3. Перенес все это дело в продуктивную систему, там тоже для части полей заполнил данные в новое поле.
А вот дальше началось интересное, запрос вида:
SELECT * INTO lt_my_table FROM my_table
WHERE R_FILE = space.
На выходе получаю SY-SUBRC = 4.==========
SELECT * INTO lt_my_table FROM my_table
WHERE R_FILE = 0.
На выходе получаю SY-SUBRC = 4.==========
SELECT * INTO lt_my_table FROM my_table
WHERE R_FILE = '0'.
На выходе получаю SY-SUBRC = 4.==========
SELECT * INTO lt_my_table FROM my_table
WHERE R_FILE = '00000'.
На выходе получаю SY-SUBRC = 4.Короче, выбрать пустые записи, которые просто запросом
SELECT * INTO lt_my_table FROM my_table выбираются кучей и при просмотре показываются как '0' или как '00000', выбрать никак не получается при прямом указании значения, хотя теоретически по равно
space, должно было бы выбраться. При этом если сделать:
SELECT * FROM my_table.
IF my_table-r_file = space.
* Сюда заходит и именно вот те самые пустые записи типа находятся
* причем можно было бы написать IF my_table-r_file = '0', и тоже заходит
ENDIF.
ENDSELECT.
Короче, пришлось сделать вторую программку вида:
SELECT * FROM my_table.
IF my_table-r_file = space.
my_table-r_file = '0'.
MODIFY my_table.
ENDIF.
ENDSELECT.
COMMIT WORK.
После чего все типа заработало... кстати, самое интересное, что на версии Oracle 9 с хвостиком (система разработки), такого эффекта не наблюдается, ну правда сюда поле не транспортом попало, но в принципе это похоже не важно, так как адаптация таблицы, через утилиту базы данных делалась по аналогии с продуктивом. Причем если записи вставлять после добавления этого нового поля, то такие записи находятся запросом равно space или равно ноль, без проблем.
В общем вот такая вот грабелька попалась, т.е. состояние добавленного поля в таблицу для уже существующих записей для поля типа NUMC (другие не проверял) вообще какое-то не определенное в базе данных, причем после считывания оно корректно конвертируется в space/0 и уже при проверке в IF все корректно, но вот выбрать такие поля SELECT-от ну никак не получается, а ощущения, типа SE16 просмотреть все... вот она запись, ставишь на селекционном экране поле равно пустому значению, а она говорит нет значений для показа и некоторое время чувствуешь себя типа а где это я, а как это я