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

Откуда:
Сообщений: 24
Добрый вечер.

Хочется освоить job'ы, но нигде не могу найти пример от начала до конца.

вот допустим есть процедура:

CREATE OR REPLACE PROCEDURE my_pro_2
(ch IN INTEGER)
IS
BEGIN
UPDATE my_test SET cnt = cnt + 1
WHERE num = '1';
END;


Скажите пожалуйста что необходимо(sql команды) что бы эта процедура запускалась например каждые 5 минут.
По поиску я ходил достаточно долго, но простого примера так и не нашел. Если кто нибудь знает где такой пример есть, то скиньте пожалуйста ссылку.
11 дек 13, 23:48    [15280119]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо создание самого простого job для образца.  [new]
JoeD
Member

Откуда: Москва
Сообщений: 266
Дима, вы извините, но очень трудно придумать и понять, как можно "долго" ходить по поиску (ок, я надеюсь вы имели в виду "читать"?) и при этом не увидеть примеров которые есть буквально _в каждом_ упоминании. В чем именно возникла сложность? Про наличие dbms_job и dbms_schedule вы знаете? Вот тут сразу два примера: документация. Засовываете "Каждые 5 минут" - в repeat_interval , имя процедуры - в job_action, job_type - 'STORED_PROCEDURE'.
На всякий случай: "от начала до конца" что имеется в виду? "Вставьте установочный диск базы данных Oracle.."? :)
12 дек 13, 00:13    [15280183]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо создание самого простого job для образца.  [new]
dima1257
Member

Откуда:
Сообщений: 24
Подправил процедуру:

CREATE OR REPLACE PROCEDURE my_pro_2
(ch IN INTEGER)
IS
BEGIN
UPDATE orders SET item = TO_CHAR(SYSDATE, 'HH24:MI:SS')
WHERE num = '1';
END;


И нашел вот такой пример

EGIN
  sys.dbms_job.submit(job => :job,
                      what => 'begin  my_pro_2; end;',       
                      next_date => to_date('12-12-2013 06:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                      INTERVAL => 'trunc(sysdate + 1) + 6/24');
  commit;
END;


но получаю ошибку(пишу в sql navigator):
12:13:03 ORA-06502: PL/SQL: numeric or value error: character string buffer too small
12:13:03 ORA-06512: at line 2


поправьте пожалуйста где ошибка.
12 дек 13, 12:22    [15281729]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо создание самого простого job для образца.  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
А параметр процедуры задавать необязательно, как ты полагаешь?
12 дек 13, 12:45    [15281908]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо создание самого простого job для образца.  [new]
-2-
Member

Откуда:
Сообщений: 15330
dima1257
Хочется освоить job'ы
сначала освой sql и plsql.

dima1257
но нигде не могу найти пример от начала до конца.
не пример надо искать, а описание принципов.
12 дек 13, 12:46    [15281920]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо создание самого простого job для образца.  [new]
dima1257
Member

Откуда:
Сообщений: 24
Мне помогли и я разобрался.
Описание принципов я прочитал и понял, но без конкретного примера сложно что либо своё создать.

создаем таблицу.
CREATE TABLE orders
        (
                num  INTEGER NOT NULL PRIMARY KEY ,
                item CHAR(50) NOT NULL
        );


вставим одну запись в созданную таблицу.
INSERT INTO orders
        ( num , item
        ) VALUES
        ( '1', '0'
        );


создаем процедуру.
CREATE OR REPLACE PROCEDURE my_pro_2
IS
BEGIN
UPDATE orders SET item = TO_CHAR(SYSDATE, 'HH24:MI:SS')
WHERE num = '1';
END;


создаем конкретно уже задание(job)
declare v_job number;
BEGIN
  sys.dbms_job.submit(job => v_job,
                      what => 'begin  my_pro_2; end;',   -- здесь имя 

вызываемой процедуры.
                      next_date => to_date('12-12-2013 12:45:00', 

'dd-mm-yyyy hh24:mi:ss'),
                      INTERVAL => 'trunc(sysdate + 1) + 6/24');
  commit;
END;
12 дек 13, 12:58    [15282032]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо создание самого простого job для образца.  [new]
123йй
Member

Откуда:
Сообщений: 1635
dima1257
создаем таблицу.
CREATE TABLE orders
        (
                num  INTEGER NOT NULL PRIMARY KEY ,
                item CHAR(50) NOT NULL
        );


вставим одну запись в созданную таблицу.
INSERT INTO orders
        ( num , item
        ) VALUES
        ( '1', '0'
        );


создаем процедуру.
CREATE OR REPLACE PROCEDURE my_pro_2
IS
BEGIN
UPDATE orders SET item = TO_CHAR(SYSDATE, 'HH24:MI:SS')
WHERE num = '1';
END;

12 дек 13, 13:21    [15282185]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо создание самого простого job для образца.  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
dima1257,
если бы ты понял описанные принципы ты бы не использовал job, а использовал бы scheduler и не писал Г-код для примера.
12 дек 13, 13:27    [15282222]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо создание самого простого job для образца.  [new]
dima1257
Member

Откуда:
Сообщений: 24
ну это да. там авто инкремент нужен.
12 дек 13, 13:34    [15282281]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить