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

Откуда: отсюда
Сообщений: 783
Странную вещь наблюдаю, не могу понять в чем дело:
Есть тексты пакетов. Накатываю их через скрипт Plus'а - выполняются успешно, однако last_ddl_time не меняется. Пробую делать то же самое через PL/SQL Developer 8.0.0.1480 - скрипты пакетов применяются и дата last_ddl_time меняется. Установки PL/SQL Developer (Preferences->Compiler) по умолчанию: Opt.Level = 2, Code Type = Interprete, все остальное тоже по умолчанию. База 10.2.0.4.0. Клиент от 10-ки. Вроде с какой-то версии в 10g Oracle может проверять, изменился ли текст пакета и в этом случае ничего не делать, но что-то не удалось найти ничего в доке об этом. Где-то когда-то что-то читал об этом, но найти не удается...
16 июл 10, 15:11    [9116701]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
SQL трассировку сними и сравни.
16 июл 10, 15:14    [9116736]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Ничего интересного не обнаружил. И там и там парсятся курсоры по пакетам. В PL/SQL Developer, естественно, выполняется больше вспомогательных запросов. Но ничего особенного не увидел...
16 июл 10, 18:52    [9118399]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Ну наверное наибольший интерес представляет происходящее между PARSE ... CREATE PROCEDURE и EXEC.
16 июл 10, 18:56    [9118413]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
Elic
Member

Откуда:
Сообщений: 29988
Деев И.
все остальное тоже по умолчанию. База 10.2.0.4.0.
И "[x] Add debug information when compiling" ? :)
16 июл 10, 19:09    [9118463]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Нет, этот флаг не установлен. В обоих случаях после компиляции пакета:

select PLSQL_DEBUG from user_plsql_object_settings s where name = 'DROP_IL_TEST';

PLSQL_DEBUG
FALSE
FALSE


Параметры оптимизатора, судя по OPTIMIZER_ENV_HASH_VALUE для DML-запросов в сессиях одинаковые. Я уж подумал, что PL/SQL Developer дополнительные пробелы в конце текста пакетов добавляет, как это происходит с отдельными запросами (! - недавно здорово пролетел на этом в одном месте), но нет, судя по трассировке. Открыл в двоичном редакторе - тексты в трассировке те же. Что-то непонятно. Причем если выполнить повторно компиляцию в PLSQL Developer, даты LAST_DDL_TIME и TIMESTAMP не меняются, аналогично в PL/SQL Developer. А вот друг после друга они пакеты перекомпилируют. Что за дела...
19 июл 10, 17:03    [9126671]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
Деев И.,

Это все про пакеты, body пакетов или и то и другое вместе?
19 июл 10, 17:27    [9126872]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Что бы не быть голословным, примерчик нарисуй, пзл. Возможно, эта шняга только у тебя и проявляется.
19 июл 10, 17:31    [9126917]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Речь идет и о спецификациях и о телах пакетов.
Интересно так же, как эта фича называется и где почитать о ней - когда пакеты зря не компилируются каждый раз. Точно читал об этом, но забыл где. И не найти никак...

Тестовый пакет (реальный пример другой, но это не так важно, видно и на этом примере).
Извините, что не привожу листинги выполнения.

create or replace package drop_il_test is
  procedure hello;
end drop_il_test;
/

create or replace package body drop_il_test is
  procedure hello is
  begin
    dbms_output.put_line('Hello!');
  end;
end drop_il_test;
/

далее - проверка времени пересоздания-компиляции:
select object_name, object_type, last_ddl_time, timestamp from user_objects o where o.OBJECT_NAME = 'DROP_IL_TEST';

и настроек:
select * from user_plsql_object_settings s where name = 'DROP_IL_TEST';

База 10.2.0.4, клиент 10.2.0.4. И PL/SQL Developer и Plus коннектятся к той же базе через тот же клиент (для PL/SQL Developer проверял по DLL-ке через Help-About).

Все это выполнить дважды по два раза по очереди в PLSQL Dev и в Plus - и все будет видно.
19 июл 10, 18:13    [9127305]     Ответить | Цитировать Сообщить модератору
 Re: Накат пакетов через Plus и PL/SQL Developer и last_ddl_time  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
mcureenab
Ну наверное наибольший интерес представляет происходящее между PARSE ... CREATE PROCEDURE и EXEC.


Кстати, DDL не выполняется, а просто парсится. При использовании dbms_sql это видно - достаточно сделать parse, и DDL выполнится. В трассировке тоже видно - там нет EXEC после DDL.
19 июл 10, 19:58    [9127644]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить