Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
в примере курсор возвращает с 10 записей - вываливается на первом execute без какой либо ошибки! Если убрем execute и вставим любой другой оператор - проходит нормально 10 циклов:
BEGIN
	FOR cur IN ( SELECT t.owner, t.object_name, t.object_type
                FROM dba_objects t
               WHERE t.object_type IN ('FUNCTION', 'PROCEDURE', 'PACKAGE', 'TRIGGER', 'VIEW')
                     AND t.status = 'INVALID'
                     AND t.owner IN
                     (SELECT du.username
                            FROM Dba_Users du
                           WHERE du.account_status = 'OPEN'
                                 AND du.default_tablespace NOT IN ('SYSAUX', 'SYSTEM')
                                 AND du.initial_rsrc_consumer_group <> 'SYS_GROUP')
              
               ORDER BY 1,3 )
	LOOP	
        dbms_output.put_line('1');
	EXECUTE IMMEDIATE 'ALTER ' || cur.object_type || ' ' || cur.owner || '.' || cur.object_name || ' COMPILE' ;           	  
	END LOOP;
END;
---
1
BEGIN
	FOR cur IN ( SELECT t.owner, t.object_name, t.object_type
                FROM dba_objects t
               WHERE t.object_type IN ('FUNCTION', 'PROCEDURE', 'PACKAGE', 'TRIGGER', 'VIEW')
                     AND t.status = 'INVALID'
                     AND t.owner IN
                     (SELECT du.username
                            FROM Dba_Users du
                           WHERE du.account_status = 'OPEN'
                                 AND du.default_tablespace NOT IN ('SYSAUX', 'SYSTEM')
                                 AND du.initial_rsrc_consumer_group <> 'SYS_GROUP')
              
               ORDER BY 1,3 )
	LOOP	
        dbms_output.put_line('1');
	-- EXECUTE IMMEDIATE 'ALTER ' || cur.object_type || ' ' || cur.owner || '.' || cur.object_name || ' COMPILE' ;           	  
	END LOOP;
END;
---
1
1
1
1
1
1
1
1
1
1
в чем проблема ? где ошибки ?
26 май 08, 09:47    [5713329]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
kinky cat
вываливается на первом execute без какой либо ошибки!
Да ну? Где выполняем?

ЗЫ: Как у нас с правами?
26 май 08, 10:12    [5713448]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Elic
Member

Откуда:
Сообщений: 29976
kinky cat
вываливается на первом execute без какой либо ошибки!
RTFM ТОП №4
26 май 08, 10:12    [5713449]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
1 - с правами нормально - DBA
2 - трассировку конечно сделаю, но чтобы в plsql developer не выводилась ошибка - такого не было
26 май 08, 10:28    [5713549]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Elic
Member

Откуда:
Сообщений: 29976
kinky cat
1 - с правами нормально - DBA
RTFM ТОП №4
26 май 08, 10:32    [5713571]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Madness
Member

Откуда: Москва
Сообщений: 648
kinky cat
чтобы в plsql developer не выводилась ошибка - такого не было

Запустите свой скрипт в SQL*Plus, узнаете много нового :)
26 май 08, 10:39    [5713625]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
Elic
kinky cat
1 - с правами нормально - DBA
RTFM ТОП №4

может стоит освежить ?
При использовании анонимного блока ситуация иная. Анонимный блок
выполняется на правах исполняющего, поэтому привилегии, данные через роль,
действуют
!
26 май 08, 11:16    [5713863]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
kinky cat
Elic
kinky cat
1 - с правами нормально - DBA
RTFM ТОП №4
может стоит освежить ?
Однозначно стоит - вопрос кому? :)
тынц по ссылке
26 май 08, 11:23    [5713901]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Elic
Member

Откуда:
Сообщений: 29976
Jannny
kinky cat
Elic
kinky cat
1 - с правами нормально - DBA
RTFM ТОП №4
может стоит освежить ?
Однозначно стоит - вопрос кому? :)
В данном случае он всё же прав.
Остаётся только посоветовать ему SQL*Plus и dbms_output.put_line('ALTER ' || ...);
26 май 08, 11:30    [5713972]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
sql*plus ответил:
ERROR:
ORA-24344: компиляция завершилась с ошибками
ORA-06512: на  line 16

Предупреждение: ошибки компиляции PL/SQL.
строка 16 - это естественно с execute ..
да, plsql developer криво обрабатываем ошибки, ну что ж будем знать..
тем не менее вопрос не снят
26 май 08, 11:40    [5714055]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
kinky cat
тем не менее вопрос не снят
Выведите те команды, которые Вы формируете, и посмотрите на них внимательно.
26 май 08, 11:53    [5714155]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Elic
Member

Откуда:
Сообщений: 29976
Jannny
Выведите те команды, которые Вы формируете, и посмотрите на них внимательно.
Команда нормальная, потому что
kinky cat
ORA-24344: компиляция завершилась с ошибками
Ненормальны объекты, которые не могут быть рекомпилированы. SHO ERR автору в зубы :)
26 май 08, 11:57    [5714188]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
запустим в sql*plus то, что выдал dbms_output
SQL> ALTER FUNCTION schema_name.func_name COMPILE;
Предупреждение: Функция изменена с ошибками компиляции.
ну ясно - не компилиться функция
Самое грустное, что EXCEPTION WHEN OTHERS THEN NULL; не помогает, ну и понятно - интерпретатор не считает это ошибкой, а скрипт вываливется.. : (

Как же plsql developer компилит инвалиды по всем схемам ?
26 май 08, 11:59    [5714201]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
Спасибо всем.
ЗЫ. Кстати, не видел на форме ни одного нормального скрипта который перекомпиливал только инвалиды и обрабатывал подобные лаги.
26 май 08, 12:03    [5714230]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
kinky cat
Самое грустное, что EXCEPTION WHEN OTHERS THEN NULL; не помогает, ну и понятно - интерпретатор не считает это ошибкой, а скрипт вываливется.. :
В смысле?

SQL> BEGIN
  2   FOR cur IN ( SELECT t.owner, t.object_name, t.object_type
  3                  FROM dba_objects t
  4                 WHERE t.object_type IN ('PACKAGE')
  5                       AND t.status = 'INVALID'
  6                       and owner = 'JANNY'
 15                 ORDER BY 1,3 )
 16   LOOP 
 17          dbms_output.put_line('ALTER ' || cur.object_type || ' ' || cur.owner || '.' || cur.object_name || ' COMPILE');
 18   EXECUTE IMMEDIATE 'ALTER ' || cur.object_type || ' ' || cur.owner || '.' || cur.object_name || ' COMPILE' ;              
 19   END LOOP;
 20  END;
 21  /
ALTER PACKAGE JANNY.TEST COMPILE
ERROR:
ORA-24344: компиляция завершилась с ошибками
ORA-06512: на  line 18

Предупреждение: ошибки компиляции PL/SQL.

SQL> ed;
Записано файл afiedt.buf

  1  BEGIN
  2   FOR cur IN ( SELECT t.owner, t.object_name, t.object_type
  3                  FROM dba_objects t
  4                 WHERE t.object_type IN ('PACKAGE')
  5                       AND t.status = 'INVALID'
  6                       and owner = 'JANNY'
 14                 ORDER BY 1,3 )
 15   LOOP
 16          dbms_output.put_line('ALTER ' || cur.object_type || ' ' || cur.owner || '.' || cur.object_name || ' COMPILE');
 17   begin
 18   EXECUTE IMMEDIATE 'ALTER ' || cur.object_type || ' ' || cur.owner || '.' || cur.object_name || ' COMPILE' ;
  19    exception
  20     when others then
 21          dbms_output.put_line('!!!');
 22     end;
 23     dbms_output.put_line('И идем дальше');
 24   END LOOP;
 25* END;
SQL> /
ALTER PACKAGE JANNY.TEST COMPILE
 !!!
 И идем дальше
Процедура PL/SQL успешно завершена.
26 май 08, 12:16    [5714302]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
stax..
Guest
kinky cat
Спасибо всем.
ЗЫ. Кстати, не видел на форме ни одного нормального скрипта который перекомпиливал только инвалиды и обрабатывал подобные лаги.

в Кайта гляньте compile_schema
.....
stax
26 май 08, 12:22    [5714344]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
Jannny
kinky cat
Самое грустное, что EXCEPTION WHEN OTHERS THEN NULL; не помогает, ну и понятно - интерпретатор не считает это ошибкой, а скрипт вываливется.. :
В смысле?

это я тупанул конечно - не там exeption вставил
26 май 08, 12:45    [5714501]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
KoTTT
Member

Откуда: Екб
Сообщений: 1511
stax..
kinky cat
Спасибо всем.
ЗЫ. Кстати, не видел на форме ни одного нормального скрипта который перекомпиливал только инвалиды и обрабатывал подобные лаги.

в Кайта гляньте compile_schema
.....
stax

utl_recomp.recomp_* рулят :-)
27 май 08, 04:31    [5718505]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
KoTTT
stax..
kinky cat
Спасибо всем.
ЗЫ. Кстати, не видел на форме ни одного нормального скрипта который перекомпиливал только инвалиды и обрабатывал подобные лаги.

в Кайта гляньте compile_schema
.....
stax

utl_recomp.recomp_* рулят :-)

может я глупость скажу но :
header в utlsampl.sql, а body где ?
27 май 08, 09:50    [5718831]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
точнее utlrcmp.sql но сути это не меняет
27 май 08, 09:53    [5718843]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
stax..
Guest
KoTTT
stax..
kinky cat
Спасибо всем.
ЗЫ. Кстати, не видел на форме ни одного нормального скрипта который перекомпиливал только инвалиды и обрабатывал подобные лаги.

в Кайта гляньте compile_schema

utl_recomp.recomp_* рулят :-)

у меня такой проблеми нет
я не ДБА, отвечал в основном на "ни одного",
когдато читал двухтомник и просто припомнилось
.......
stax
27 май 08, 10:00    [5718876]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
KoTTT
Member

Откуда: Екб
Сообщений: 1511
Oracle 10.2 - спецификация в utlrcmp.sql, тело в prvtrcmp.plb.
Oracle 9.2 - и спецификация, и тело в utlrcmp.sql.
И зачем это вам?
27 май 08, 10:07    [5718918]     Ответить | Цитировать Сообщить модератору
 Re: execute immediate в цикле for cur in ( select ...  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1238
KoTTT
И зачем это вам?

странный вопрос..
Вы ж не из Одессы..
27 май 08, 11:38    [5719740]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить