|
|
|
В чем здесь собака порылась?
|
|||
|---|---|---|---|
|
#18+
Такая процедура должна вызыватся при старте приложения и постараться рекомпилировать все Invalid-обьекты. По идее, если в принципе обьекты без ошибок, то процедура должна заканчиваться не то что counter = 100, но примерно counter = 4, так как большей вложенности обьектов у нас нет. Но почему то этого не проис ходит. Т.е. отдельные обьекты так и остаются Invalid... (а вручную их можно спокойно перекомпилить) В чем здесь собака порылась? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2003, 13:25:42 |
|
||
|
В чем здесь собака порылась?
|
|||
|---|---|---|---|
|
#18+
А с курсорами ты ничего не напутал. Что-то ты не к месту закрываешь курсор в середине цикла по нему. И выведи ошибку Код: plaintext 1. 2. 3. 4. 5. Например в какую-нибудь переменную, тебе же нужен список неудач. А в конце процедуры уже сгенери свою ошибку сформированную из списка который возникли в цикле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2003, 13:41:46 |
|
||
|
В чем здесь собака порылась?
|
|||
|---|---|---|---|
|
#18+
"Т.е. отдельные обьекты так и остаются Invalid" У тебя обьекты наверняка взаимосвязаны. Например есть два вью. Второй вью основан на первом. Если первый вью инвалидный, то и второй тоже будет инвалидный. Я твой код не изучал, поэтому спрашиваю - у тебя соблюдается порядок перекомпиляции? Если нет, то можно до бесконечности эту процедуру запускать - если ты сначала компилишь второй вью, а потом первый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2003, 13:46:32 |
|
||
|
В чем здесь собака порылась?
|
|||
|---|---|---|---|
|
#18+
Постойте а где DBMS_SQL.EXECUTE ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2003, 13:51:34 |
|
||
|
В чем здесь собака порылась?
|
|||
|---|---|---|---|
|
#18+
И вообще здесь от DBMS_SQL выигрыша никакого нет Лучше EXECUTE IMMEDIATE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2003, 13:52:55 |
|
||
|
В чем здесь собака порылась?
|
|||
|---|---|---|---|
|
#18+
Если тебе надо перекомпилить все invalid объекты определённой схемы то делай вот так dbms_utility.compile_schema('schema1', False); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2003, 13:57:45 |
|
||
|
В чем здесь собака порылась?
|
|||
|---|---|---|---|
|
#18+
------------------------------------------------------------------------ -- -- Script for recompile all objects in Current user scheme -- ------------------------------------------------------------------------ declare COMPILE_WITH_ERROR EXCEPTION; PRAGMA EXCEPTION_INIT(COMPILE_WITH_ERROR,-24344); IsExists number; a_cursor number; rowprocessed number; i number; nCount number; isInvalid number; strSQL varchar2(128); Type ObjectName_Type is table OF varchar2(30) index by binary_integer; Type ObjectType_Type is table OF varchar2(30) index by binary_integer; tObjectName ObjectName_Type; tObjectType ObjectType_Type; lSQLErrm varchar2(64); lSQLCode varchar2(32); cursor crs1 is select ao.object_name,ao.object_type from user_objects ao where ao.STATUS='INVALID' and ao.object_type in ('PROCEDURE','FUNCTION','PACKAGE BODY','VIEW','TRIGGER') order by ao.created; cursor crs_check(iObjName varchar2, iObjType varchar2) is select count(*) from user_objects where object_name=iObjName and object_type=iObjType and status='INVALID'; begin i := 0; for c1rec in crs1 loop i := i + 1; tObjectName(i) := c1rec.object_name; tObjectType(i) := c1rec.object_type; end loop; nCount := i; for i in 1..nCount loop open crs_check(tObjectName(i),tObjectType(i)); fetch crs_check into isInvalid; if isInvalid > 0 then a_cursor:=dbms_sql.open_cursor; if tObjectType(i)='PACKAGE BODY' then strSQL := 'ALTER PACKAGE '||tObjectName(i)||' COMPILE BODY'; else strSQL := 'ALTER '||tObjectType(i)||' '||tObjectName(i)||' COMPILE'; end if; begin dbms_sql.parse(a_cursor,strSQL,dbms_sql.v7); exception when COMPILE_WITH_ERROR then null; when others then lSQLCode := SQLCODE; lSQLErrm := SQLERRM; rollback; raise_application_error(-20000,lSQLCode||', Mesg:'||lSQLErrm||', in sql:'||strSQL,TRUE); end; rowprocessed:=dbms_sql.execute(a_cursor); dbms_sql.close_cursor(a_cursor); end if; close crs_check; end loop; end; / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2003, 13:58:43 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2773&tid=1990363]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 323ms |

| 0 / 0 |
