+ -
当前位置:首页 → 问答吧 → oracle 作业执行问题

oracle 作业执行问题

时间:2011-11-21

来源:互联网

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'这句有问题 但不加引号 编译也不能通过,请问正确的写法~~

作者: lianqianxue   发布时间: 2011-11-21

是什么问题?job不自动执行是吧?

作者: cuiyushan   发布时间: 2011-11-21

对的

作者: lianqianxue   发布时间: 2011-11-21

函数的调用顺序有错,应该是next_day(trunc(sysdate))

作者: LuiseRADL   发布时间: 2011-11-21

next_date有问题吧,怎么着也得写个sysdate以后的日期
这块没怎么用过,你把next_date改一个sysdate+1/24/60试试

作者: cuiyushan   发布时间: 2011-11-21

引用 3 楼 luiseradl 的回复:

函数的调用顺序有错,应该是next_day(trunc(sysdate))
不太明白~~

作者: lianqianxue   发布时间: 2011-11-21

把next_date改为to_date('1-12-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss')试试
看情况你是想每月1号凌晨1点执行

作者: cuiyushan   发布时间: 2011-11-21

引用 6 楼 cuiyushan 的回复:

把next_date改为to_date('1-12-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss')试试
看情况你是想每月1号凌晨1点执行
试了 我直接运行job 的时候报错

作者: lianqianxue   发布时间: 2011-11-21

报什么错呢?job可以应用过去么?
还是run的时候报错?

作者: cuiyushan   发布时间: 2011-11-21

run 的时候 报错

作者: lianqianxue   发布时间: 2011-11-21


在行 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.

作者: lianqianxue   发布时间: 2011-11-21

create_hd_table;
看看这个有没有问题

作者: cuiyushan   发布时间: 2011-11-21

存储过程没有问题,单独执行是可以的

作者: lianqianxue   发布时间: 2011-11-21

SQL code
create or replace procedure cys_test is
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改错,
出现的错误就和你一样了.
你再确认一下存储过程

作者: cuiyushan   发布时间: 2011-11-21

我也测试了 下 换个存储过程 可以成功,可是我的存储过程 运行却能成功啊~~ 没什么错误~~啊 崩溃了

作者: lianqianxue   发布时间: 2011-11-21

JScript code
create or replace
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; 注释就能成功。。

作者: lianqianxue   发布时间: 2011-11-21

不好说.有时候自己运行能成功不代表一直就能成功
你可以在存储过程里增加exception记录.把出现的异常存到表里或者什么地方
看看到底问题在哪

作者: cuiyushan   发布时间: 2011-11-21

你把 -- execute immediate sqlstr;
改成insert into sql_str(sql_string) value(sqlstr);
把每次的sql语句看看.

作者: cuiyushan   发布时间: 2011-11-21

引用 17 楼 cuiyushan 的回复:
你把 -- execute immediate sqlstr;
改成insert into sql_str(sql_string) value(sqlstr);
把每次的sql语句看看.


多半是权限的问题

作者: jym2002   发布时间: 2011-11-21

引用 18 楼 jym2002 的回复:

引用 17 楼 cuiyushan 的回复:
你把 -- execute immediate sqlstr;
改成insert into sql_str(sql_string) value(sqlstr);
把每次的sql语句看看.


多半是权限的问题


楼主说单独执行没问题,应该不会有权限的问题吧?
应该还是procedure有问题.

作者: cuiyushan   发布时间: 2011-11-21

热门下载

更多