VARIABLE JOB NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
JOB => :JOB,
WHAT => 'create_hd_table;',
NEXT_DATE => sysdate,
Interval =>'TRUNC(LAST_DAY(SYSDATE))+1+1/24');
COMMIT;
END;这是我job 的代码 现在是执行,好像是Interval =>'TRUNC(LAST_DAY(SYSDATE))+1+1/24'这句有问题 但不加引号 编译也不能通过,请问正确的写法~~
BEGIN
DBMS_JOB.SUBMIT(
JOB => :JOB,
WHAT => 'create_hd_table;',
NEXT_DATE => sysdate,
Interval =>'TRUNC(LAST_DAY(SYSDATE))+1+1/24');
COMMIT;
END;这是我job 的代码 现在是执行,好像是Interval =>'TRUNC(LAST_DAY(SYSDATE))+1+1/24'这句有问题 但不加引号 编译也不能通过,请问正确的写法~~
这块没怎么用过,你把next_date改一个sysdate+1/24/60试试
看情况你是想每月1号凌晨1点执行
还是run的时候报错?
在行 1,465 上开始执行命令时出错:
BEGIN DBMS_JOB.run(114); END;
错误报告:
ORA-12011: 无法执行 1 作业
ORA-06512: 在 "SYS.DBMS_IJOB", line 651
ORA-06512: 在 "SYS.DBMS_JOB", line 284
ORA-06512: 在 line 1
12011. 00000 - "execution of %s jobs failed"
*Cause: An error was caught in dbms_ijob.run from one or more jobs
which were due to be run.
*Action: Look at the alert log for details on which jobs failed and why.
看看这个有没有问题
begin
insert into sys_bas_user(user_id,user_name) values((select max(to_number(user_id))+1 from sys_bas_user),'abc');
commit;
end cys_test;
这是我的存储过程,其他job参数和你一样,我就执行能通过的.如果我把过程里的sql改错,
出现的错误就和你一样了.
你再确认一下存储过程
procedure create_hd_table authid current_user as
tablename varchar2(50);
sqlstr varchar2(800);
flag number(10,0);
sqlfalg varchar(200);
begin
flag:=0;
tablename:=UPPER('zj_hd_details_info_');
tablename:= CONCAT(tablename,to_char(ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1),'yyyy_MM'));
sqlfalg:='select count(*) from user_TABLES where table_name='''||tablename||'''';
execute immediate sqlfalg into flag;
-- dbms_output.put_line(flag);
if flag=0 then --如果没有这个表 则去创建
begin
sqlstr:='create table '||tablename ||'(C_ID NUMBER(18,0),
C_C_ID VARCHAR2(50),
C_ZJ_ID VARCHAR2(50),
C_SERVER_TYPE VARCHAR2(50),
C_VIRTUAL_NUMBER VARCHAR2(20),
C_CALLER VARCHAR2(20),
C_TRUE_CALLER VARCHAR2(20),
C_CALLED VARCHAR2(20),
C_START VARCHAR2(50),
C_CONNECT VARCHAR2(50),
C_END VARCHAR2(50),
c_billing_start VARCHAR2(50),
C_Hd_billing_end VARCHAR2(50),
C_h_time VARCHAR2(50),
C_billing_time VARCHAR2(50),
C_DIRECTION VARCHAR2(50),
C_CHANNEL VARCHAR2(50),
C_RELATION_ID VARCHAR2(50),
C_NUMBER_TYPE VARCHAR2(50),
C_W_CONNECT VARCHAR2(20),
C_CALL_TYPE VARCHAR2(50),
C_RECORD_NAME VARCHAR2(50),
C_COST NUMBER(18,0),
c_iscost VARCHAR2(20)
)';
--dbms_output.put_line(sqlstr);
-- execute immediate sqlstr;
end;
end if;
--dbms_output.put_line(sqlstr);
end; 发现把execute immediate sqlstr; 注释就能成功。。
你可以在存储过程里增加exception记录.把出现的异常存到表里或者什么地方
看看到底问题在哪
改成insert into sql_str(sql_string) value(sqlstr);
把每次的sql语句看看.
楼主说单独执行没问题,应该不会有权限的问题吧?
应该还是procedure有问题.
sys.dbms_job.submit(job => :job,
what => 'sxf_iom_bf_prod;',
next_date => to_date('23-11-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(SYSDATE+1)+1/24');
commit;
end;
/
这个是我在用的 job