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

Откуда: Минск
Сообщений: 9
Добрый день уважаемые гуру.
Имеется вот такой скрипт, который я не могу до конца реализовать. Он должен по dblink-у соединиться со всеми серверами и посмотреть инвалидные объекты, если такие имеются, записать их в таблицу.
declare
dbl_t number(5);
data date;
sql_txt varchar2(200);
  
begin   
FOR t IN (select db_link from all_db_links ) 
      LOOP 
        dbl_t:=1 ;   
             begin
              
                EXECUTE immediate 'select 1  from dual@'||t.db_link; 
                exception WHEN others then      
                begin
                dbl_t:=0 ; 
                insert into  LOG_INVALIDS (Date_check,Servers,owner) values (data,t.db_link, 'Error' );
                end;     
             end;       
select sysdate into data from dual;
sql_txt:= 'SELECT owner, object_name, object_type,status FROM   dba_objects@'||t.db_link||' WHERE  status = '||'INVALID'||' and owner<>'||'PUBLIC'||' and 
object_name not in('||'F$CHECK20_20081202'||','||'INSERTING_DELIV_SITES'||','||'INSERTING_STREET'||','||'LOAD_CONST_ZARP'||','||'LOAD_CONST_174_9_18'||',
'||'LOAD_CONST_218'||','||'P_RESLILIPUT'||','||'P_RESULT_GOR'||','||'PROCESSDIGIT'||','||'P_SIZEINV_1'||','||'P_SIZEINV_2'||','||'RMP_DIGITS2STR'||','||'RUN_GET_SUM_C'||') ORDER BY owner';

for c in (sql_txt)  loop

begin   
insert into  LOG_INVALIDS values (data,t.db_link,c.owner, c.object_name,c.object_type,c.status); 
end;
end loop;
end loop;
end;


У меня не получается динамически подключаться к серверам и считывать от туда информацию, хэлп...
29 мар 13, 16:09    [14113703]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
123йй
Member

Откуда:
Сообщений: 1637
Crazy_Fish,
автор
sql_txt:=

execute immediate '...'
29 мар 13, 16:13    [14113722]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
123йй
Member

Откуда:
Сообщений: 1637
123йй,
сам себе дока

open.. for ..
29 мар 13, 16:19    [14113762]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
juras
Member

Откуда: Прага
Сообщений: 257
Crazy_Fish,

Попробуйте сначало разобраться с правами на ALL...,
потом с формированием строки sql_txt = ,
потом с NDS
ну и наконец почитайте о text literals
29 мар 13, 16:20    [14113769]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
JaRo
Member

Откуда:
Сообщений: 1659
Crazy_Fish
for c in (sql_txt) loop
open .. for ..
29 мар 13, 16:23    [14113784]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
Crazy_Fish
Member

Откуда: Минск
Сообщений: 9
123йй
Crazy_Fish,
автор
sql_txt:=

execute immediate '...'

так а как из execute immediate тогда вернуть значения?



Просто основная проблема в том, что если убрать в sql_txt имя dblink, то все прекрасно работает, про NDS узнал кое что новое, спасибо juras, а про open .. for .. не понял


Склейка sql_text вроде правтльная
29 мар 13, 16:40    [14113887]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Crazy_Fish
..

Склейка sql_text вроде правтльная

читайте концепции. без основ - проку не будет
pl/sql - операторы (в частности - курсорный цикл, который вы используете) требуют предварительной
(стало быть до-начала-исполнения программной единицы) компиляции. ну а если хотите исполнять запросы, текст которых
формируете на-лету, то вам нужен динамический эскуэль
29 мар 13, 16:53    [14113977]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
juras
Member

Откуда: Прага
Сообщений: 257
Crazy_Fish,

Тогда еще читайте ... Coding Dynamic SQL - там про опен.. фор внятно написано.

автор
если убрать в sql_txt имя dblink, то все прекрасно работает

ваш вариант не работает

автор
Склейка sql_text вроде правтльная


попробуйте вывести через
dbms_output.put_line()

а потом запустить в sql*plusu чтобы убедиться в "правильности"
29 мар 13, 16:56    [14113998]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
Crazy_Fish
Member

Откуда: Минск
Сообщений: 9
juras,
спасибо за совет
29 мар 13, 17:01    [14114034]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с процедурой  [new]
Crazy_Fish
Member

Откуда: Минск
Сообщений: 9
juras,

помогло, запрос действительно с ошибкой, сейчас буду дальше разбираться, спасибо
29 мар 13, 17:06    [14114059]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить