2017-09-21 99 views
8

Mam kilka procedur Wyrocznia:Jak rozwiązać ORA-27475: "JOB" musi być program lub łańcuch

create or replace procedure receive_sms (p_to_date in date) 
is 
.. 
end; 

i

create or replace procedure send_sms (p_date in date) 
is 
.. 
end; 

i chcę, aby utworzyć łańcuch oparciu na tych procedurach i dodać kroki do łańcucha i pewne zasady:

BEGIN 
    DBMS_SCHEDULER.CREATE_CHAIN (
    chain_name   => 'mobile_archive_chain', 
    rule_set_name   => NULL, 
    evaluation_interval => NULL, 
    comments    => NULL); 
END; 
/

--- define three steps for this chain. Referenced programs must be enabled. 
BEGIN 
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('mobile_archive_chain', 'send', 'inforpilla.send_sms'); 
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('mobile_archive_chain', 'receive', 'inforpilla.receive_sms'); 
END; 
/

--- define corresponding rules for the chain. 
BEGIN 
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('mobile_archive_chain', 'TRUE', 'START send'); 
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('mobile_archive_chain', 'send COMPLETED', 'Start receive'); 
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('mobile_archive_chain', 'receive COMPLETED', 'END'); 
END; 
/

--- enable the chain 
BEGIN 
DBMS_SCHEDULER.ENABLE('mobile_archive_chain'); 
END; 
/

--- create a chain job to start the chain daily at 1:00 p.m. 
BEGIN 
DBMS_SCHEDULER.CREATE_JOB (
    job_name  => 'start_archive', 
    job_type  => 'CHAIN', 
    job_action  => 'mobile_archive_chain', 
    repeat_interval => 'freq=daily;byhour=15;byminute=3;bysecond=0', 
    enabled   => TRUE); 
END; 
/

Ale sprawdzanie tabeli dziennika widzę, że zadanie nie powiodło się z kodem błędu: 27475

SELECT * from USER_SCHEDULER_JOB_RUN_DETAILS ORDER BY LOG_DATE DESC 

jak sugeruje usunąć parametry tworzą procedurę, ale wtedy mam te błędy:

CHAIN_LOG_ID="201095" 
CHAIN_LOG_ID="201095",STEP_NAME="RECEIVE", ORA-27475: "TEST.RECEIVE_SMS" must be a PROGRAM OR CHAIN 
CHAIN_LOG_ID="201095",STEP_NAME="SEND", ORA-27475: "TEST.SEND_SMS" must be a PROGRAM OR CHAIN 

Odpowiedz

1

Myślę, że musisz użyć DBMS_SCHEDULER.CREATE_PROGRAM, aby utworzyć obiekt programu, a następnie przekazać nazwę tego obiektu do DBMS_SCHEDULER.DEFINE_CHAIN_STEP. Wygląda na to, że trzecim argumentem dla DEFINE_CHAIN_STEP jest nazwa programu i definiujesz tę nazwę programu z wywołaniem CREATE_PROGRAM.

Instrukcja url:

http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72235

5

istnieje kilka rzeczy trzeba się upewnić:

  1. Lepiej podać pełną nazwę zadania w OWNER.JOBNAME. Zobacz, kto jest właścicielem pracy

    select * from dba_scheduler_jobs where lower(job_name)='start_archive'; 
    
  2. Jeśli data_początkowa i repeat_interval pozostawionych null, wtedy zadanie jest zaplanowane tak szybko, jak jest włączona praca.

  3. Zadanie działa jako osoba, która planuje zadanie, nie powinieneś planować zadań jako SYS, jeśli chcesz korzystać z bieżących uprawnień użytkownika!

Odniesienia: -

Oracle Community

Ask Tom

2

problem może być w łańcuchu, i łańcuch kroki nazwy. Spróbuj użyć wielkich liter dla wszystkich etapów zadania, łańcucha i łańcucha lub utwórz nazwy z podwójnymi cudzysłowami: ""

W Oracle oznacza identyfikatory bez rozróżniania wielkości liter i konwertuje na duże litery. W związku z tym oracle nie był w stanie znaleźć nazwy twojego łańcucha. To samo dotyczy kroków łańcucha, reguł itp.

Ponadto procedury "wyślij" i "odbierz" oczekują parametrów (p_to_date), a te parametry nie są przekazywane podczas wywoływania łańcucha łańcucha. Spowoduje to problem. Nie ma bezpośredniego sposobu na przekazywanie parametrów łańcucha. Spójrz na ten post: community.oracle.com/message/1459336#1459336

+0

nie sądzę. z dokumentów https://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse009.htm # ADMIN12456 –

+1

Istnieje również inny problem w połączeniach łańcuchowych. Procedury, których oczekujecie, parametry (p_to_date) i te parametry nie są przekazywane podczas wywoływania łańcucha łańcucha. Spowoduje to problem. Nie ma bezpośredniego sposobu na przekazywanie parametrów łańcucha. Zobacz ten wpis: https://community.oracle.com/message/1459336#1459336 –