Estou tentando criar um trabalho agendado no Oracle SQL Developer que seria executado uma vez por mês e estou testando o recurso Agendador/Trabalhos em que criei uma consulta SQL simples para testar a capacidade de fazer isso. Tenho uma tabela simples chamada "TEST123" e posso ver que funciona quando faço "SELECT * FROM TEST123;".
No SQL Developer eu tenho um Job chamado "TEST1" que tem um bloco PL/SQL = "DROP TABLE TEST123;" para ser executado imediatamente (embora eu também tenha testado isso executando em um horário específico).
Depois vejo que ainda posso selecionar dessa tabela de teste e que o ESTADO do nome do trabalho é "FAILED". Deixei todas as outras configurações como padrão. O que estou perdendo aqui? Por que está falhando e há uma maneira de corrigi-lo?
SQL do assistente de trabalho:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => '"TEST1"',
job_type => 'PLSQL_BLOCK',
job_action => 'DROP TABLE MKTRD.TEST123;',
number_of_arguments => 0,
start_date => NULL,
repeat_interval => NULL,
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => '');
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"TEST1"',
attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
DBMS_SCHEDULER.enable(
name => '"TEST1"');
END;
Erro do registro de tarefas:
"ORA-06550: line 1, column 757:
PLS-00103: Encountered the symbol "DROP" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
json_exists json_value json_query json_object json_array
The symbol "lock was inserted before "DROP" to continue.
ORA-06550: line 1, column 781:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
. , @ in <an identifier>
<a double-quoted delimited-identifier> partition subpartition
ORA-06550: line 1, column 856:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
end not pragma final instantiable order overriding static
member constructor map
"
Atualização: Se eu usar a sintaxe do bloco PLSQL de
BEGIN
DROP TABLE TEST123;
END
Ainda recebo um erro de:
"ORA-06550: line 2, column 3:
PLS-00103: Encountered the symbol "DROP" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
json_exists json_value json_query json_object json_array
The symbol "lock was inserted before "DROP" to continue.
ORA-06550: line 2, column 27:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
. , @ in <an identifier>
<a double-quoted delimited-identifier> partition subpartition
"
Aqui está a resposta correta para sua postagem no reddit pelo usuário do reddit 'beunbehagen'
Obrigado a todos por seus comentários, acontece que há um problema ao tentar agendar tarefas para instruções DDL. Eu tentei mudar isso:
Para isso:
E correu para um novo problema. Acontece que eu preciso ter um ';' depois do FIM também. Então, quando eu fiz isso, funcionou: