русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Задача. Поиск текста во вьюшках.


Дата добавления: 2015-08-31; просмотров: 1058; Нарушение авторских прав


Как вы уже знаете, в функциях, процедурах, пакетах и триггерах можно найти интересующий текст с помощью вьюшки словаря данных user_source:

select * from user_source where upper(text) like '%TEMPLATE%';

Однако тексты вьюшек хранятся отдельно от user_source во вьюшке user_views.

 

Найти в user_views все вьюшки, содержащие в коде выражение'TEMPLATE'.

Попытка поискать данные в поле text с типом данных long запросом

select * from user_views where text like '%TEMPLATE%';

приводит к ошибке, т.к. тип данных long устроен хитро.

Переменную типа long при длине текста до 32000 символов можно сравнивать like-ом внутри PL/SQL блока:

begin

for z in (select view_name, text from user_views where text_length < 32000) loop

if upper(z.text) like '%TEMPLATE%' then

dbms_output.put_line(z.view_name);

end if;

end loop;

end;

После этого можно вручную посмотреть вьюшки с text_length >= 32000 и поискать в их тексте желанное выражение:

select view_name, text from user_views where text_length >= 32000;

Jobs.

В оракле есть возможность поставить процедуру на регулярное выполнение по расписанию. Это делается с помощью механизма джобов.

 

С помощью вызова dbms_job.submit создадим джоб, запускающий процедуру load_kk_st_deposit из задачи "Загрузка данных с помощью full join".

Параметр next_date имеет тип данных date, это показатель, в какой момент времени джоб запустится в первый раз.

В данном вызове "next_date => sysdate + 1 / 24 / 60 / 2" означает, что джоб запустится через полминуты после выполнения нижеприведенного вызова.

Параметр interval имеет строковый тип данных, это показатель, с какой частотой будет выполняться джоб.

В данном вызове "interval => 'trunc(sysdate, ''MI'') + 1 / 24 / 60'" означает, что всякий раз по завершении выполнения джоба он будет ставиться на запуск по расписанию в следующий ближайший момент с целым количеством минут и нулем секунд.



Если вызываемая процедура load_kk_st_deposit будет выполняться быстрее минуты, то джоб будет отрабатывать раз в минуту.

Итак, вызываем создание джоба. Посмотрим получившийся номер джоба в dbms_output:

declare

v_job_number integer;

begin

dbms_job.submit(job => v_job_number,

what => 'declare

i integer;

d integer;

u integer;

begin

load_kk_st_deposit(i, d, u);

end;',

next_date => sysdate + 1 / 24 / 60 / 2,

interval => 'trunc(sysdate, ''MI'') + 1 / 24 / 60');

dbms_output.put_line(to_char(v_job_number));

commit;

end;

(При работе с джобами удобно использовать именованную нотацию.)

 

Заметим, что на сервере может быть установлено ограничение на количество разрешенных джобов, т.е. вышеприведенный запуск не гарантирует того, что джоб реально стартует.

 

Поищем, присутствует ли джоб с выдавшимся в dbms_output номером в системной вьюшке user_jobs:

select * from user_jobs where job = 466423;

 

В этом месте читателю предлагается самостоятельно проверить, что джоб действительно регулярно выполняет процедуру load_kk_st_deposit и занимается загрузкой данных из kk_deposit в kk_st_deposit.

 

Теперь поменяем джоб с помощью команды dbms_job.change. Сделаем так, чтобы гонялся пустой PL/SQL-блок один раз в час:

begin

dbms_job.change(job => 466423,

what => 'begin null; end;',

next_date => sysdate,

interval => 'trunc(sysdate, ''HH24'') + 1 / 24');

commit;

end;

 

В этом месте читателю предлагается самостоятельно проверить, что джоб более не занимается загрузкой данных, а ничего полезного уже не делает.

 

Теперь поставим джобу параметр broken, равный true. Это отключит выполнение джоба, оставив его в памяти.

begin

dbms_job.broken(job => 466423, broken => true);

commit;

end;

 

Снова включим джоб, установив параметр broken, равный false. Если другие параметры не указаны, то джоб сразу запустится.

begin

dbms_job.broken(job => 466423, broken => false);

commit;

end;

 

Командой dbms_job.remove можно удалить джоб навсегда.

begin

dbms_job.remove(job => 466423);

commit;

end;

 

Отметим, что команды dbms_job.change, dbms_job.broken, dbms_job.remove разумно выполнять, когда джоб не занимается выполнением поставленной на расписание процедуры, а отдыхает, ожидая следующего запуска.



<== предыдущая лекция | следующая лекция ==>
Задача. LAST_DDL_TIME. | Динамический SQL.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.284 сек.