oracle 作业执行问题
时间:2011-11-21
来源:互联网
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
作者: cuiyushan 发布时间: 2011-11-21

作者: lianqianxue 发布时间: 2011-11-21
作者: LuiseRADL 发布时间: 2011-11-21
这块没怎么用过,你把next_date改一个sysdate+1/24/60试试
作者: cuiyushan 发布时间: 2011-11-21
函数的调用顺序有错,应该是next_day(trunc(sysdate))
作者: lianqianxue 发布时间: 2011-11-21
看情况你是想每月1号凌晨1点执行
作者: cuiyushan 发布时间: 2011-11-21
把next_date改为to_date('1-12-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss')试试
看情况你是想每月1号凌晨1点执行
作者: lianqianxue 发布时间: 2011-11-21
还是run的时候报错?
作者: cuiyushan 发布时间: 2011-11-21
作者: 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
看看这个有没有问题
作者: cuiyushan 发布时间: 2011-11-21
作者: lianqianxue 发布时间: 2011-11-21
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
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
改成insert into sql_str(sql_string) value(sqlstr);
把每次的sql语句看看.
作者: cuiyushan 发布时间: 2011-11-21
你把 -- execute immediate sqlstr;
改成insert into sql_str(sql_string) value(sqlstr);
把每次的sql语句看看.
多半是权限的问题
作者: jym2002 发布时间: 2011-11-21
引用 17 楼 cuiyushan 的回复:
你把 -- execute immediate sqlstr;
改成insert into sql_str(sql_string) value(sqlstr);
把每次的sql语句看看.
多半是权限的问题
楼主说单独执行没问题,应该不会有权限的问题吧?
应该还是procedure有问题.
作者: cuiyushan 发布时间: 2011-11-21
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28