Reputation: 1
I´m try to create a JOB whit this form:
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'OWNER.TEST_PROM'
,start_date => TO_TIMESTAMP_TZ('2018/12/07 03:00:00.324000 -05:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm')
,repeat_interval => 'freq=daily'
,end_date => NULL
,job_class => 'DEFAULT_JOB_CLASS'
,job_type => 'PLSQL_BLOCK'
,job_action => '
BEGIN
DECLARE
VAR_1 VARCHAR2(30) := '001';
VAR_2 VARCHAR2(20) := '';
VAR_3 VARCHAR2(20) := TO_CHAR(TO_DATE(SYSDATE-15),''YYYYMMDD'');
VAR_4 VARCHAR2(20) := TO_CHAR(TO_DATE(SYSDATE),''YYYYMMDD'');
OWNER.LOAD_DATA_LOCAL.LOAD_PROM (VAR_1,VAR_2,VAR_3,VAR_4);
OWNER.LOAD_DATA_LOCAL.LOAD_COB_PROM (VAR_1,VAR_2,VAR_3,VAR_4);
OWNER.LOAD_DATA_LOCAL.LOAD_CUP (VAR_1,VAR_2,VAR_3,VAR_4);
end;'
,comments => 'Ejecuta LOAD_prueba_cupones'
);
end;
/
When I run it, I get the following error:
Error at line 1
ORA-01756: quoted string not properly terminated
ORA-06512: at "SYS.DBMS_ISCHED", line 185
ORA-06512: at "SYS.DBMS_SCHEDULER", line 486
ORA-06512: at line 2
Script Terminated on line 1.
Upvotes: 0
Views: 640
Reputation: 406
Or use the Oracle quoting string construct q'[ ... ]' and do not worry about the number of escape quotes:
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'OWNER.TEST_PROM'
,start_date => TO_TIMESTAMP_TZ('2018/12/07 03:00:00.324000 -05:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm')
,repeat_interval => 'freq=daily'
,end_date => NULL
,job_class => 'DEFAULT_JOB_CLASS'
,job_type => 'PLSQL_BLOCK'
,job_action => q'[
BEGIN
DECLARE
VAR_1 VARCHAR2(30) := '001';
VAR_2 VARCHAR2(20) := '';
VAR_3 VARCHAR2(20) := TO_CHAR(TO_DATE(SYSDATE-15),'YYYYMMDD');
VAR_4 VARCHAR2(20) := TO_CHAR(TO_DATE(SYSDATE),'YYYYMMDD');
OWNER.LOAD_DATA_LOCAL.LOAD_PROM (VAR_1,VAR_2,VAR_3,VAR_4);
OWNER.LOAD_DATA_LOCAL.LOAD_COB_PROM (VAR_1,VAR_2,VAR_3,VAR_4);
OWNER.LOAD_DATA_LOCAL.LOAD_CUP (VAR_1,VAR_2,VAR_3,VAR_4);
end;]'
,comments => 'Ejecuta LOAD_prueba_cupones'
);
end;
/
Upvotes: 2
Reputation: 222432
The job_action
declaration is enclosed in single quotes. Hence, you need to escape all single quotes that are within it, else Oracle is not able to properly parse it.
So you should replace every '
with ''
within the job_action
, namely in the declarations of VAR1
and VAR2
(VAR3
and VAR4
are fine already) :
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'OWNER.TEST_PROM'
,start_date => TO_TIMESTAMP_TZ('2018/12/07 03:00:00.324000 -05:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm')
,repeat_interval => 'freq=daily'
,end_date => NULL
,job_class => 'DEFAULT_JOB_CLASS'
,job_type => 'PLSQL_BLOCK'
,job_action => '
BEGIN
DECLARE
VAR_1 VARCHAR2(30) := ''001'';
VAR_2 VARCHAR2(20) := '''';
VAR_3 VARCHAR2(20) := TO_CHAR(TO_DATE(SYSDATE-15),''YYYYMMDD'');
VAR_4 VARCHAR2(20) := TO_CHAR(TO_DATE(SYSDATE),''YYYYMMDD'');
OWNER.LOAD_DATA_LOCAL.LOAD_PROM (VAR_1,VAR_2,VAR_3,VAR_4);
OWNER.LOAD_DATA_LOCAL.LOAD_COB_PROM (VAR_1,VAR_2,VAR_3,VAR_4);
OWNER.LOAD_DATA_LOCAL.LOAD_CUP (VAR_1,VAR_2,VAR_3,VAR_4);
end;'
,comments => 'Ejecuta LOAD_prueba_cupones'
);
end;
/
See this Oracle doc for examples of creating jobs.
Upvotes: 2
Reputation: 1547
Try:
BEGIN
DECLARE
VAR_1 VARCHAR2(30) := '001';
VAR_2 VARCHAR2(20) := '';
VAR_3 VARCHAR2(20) := TO_CHAR(TO_DATE(SYSDATE-15),'YYYYMMDD');
VAR_4 VARCHAR2(20) := TO_CHAR(TO_DATE(SYSDATE),'YYYYMMDD');
begin
OWNER.LOAD_DATA_LOCAL.LOAD_PROM (VAR_1,VAR_2,VAR_3,VAR_4);
OWNER.LOAD_DATA_LOCAL.LOAD_COB_PROM (VAR_1,VAR_2,VAR_3,VAR_4);
OWNER.LOAD_DATA_LOCAL.LOAD_CUP (VAR_1,VAR_2,VAR_3,VAR_4);
end;
--comments => 'Ejecuta LOAD_prueba_cupones'
--);
end;
I'm guessing here because I have no way of testing the code, but there seemed to be some syntactical errors at first glance.
Upvotes: -1