当前位置:  数据库>oracle

Oracle通过job定时执行任务

    来源: 互联网  发布时间:2017-05-26

    本文导语:   在项目中,经常会遇到需要定时完成的任务,比如定时更新数据,定义统计数据生成报表等等,其实这些事情都可以使用Oracle的Job来完成。下面考试大就结合我们实验室项目实际,简单介绍一下在Oracle数据库中通过Job完成自...

  在项目中,经常会遇到需要定时完成的任务,比如定时更新数据,定义统计数据生成报表等等,其实这些事情都可以使用Oracle的Job来完成。下面考试大就结合我们实验室项目实际,简单介绍一下在Oracle数据库中通过Job完成自动创建表的方法。

  整个过程总共分为两步。虽然整个过程都非常简单,但是对于初学Oracle的生手还是有很多地方需要注意的。

  首先介绍一下,创建该JOB的背景,因为每天更新的直播和点播节目信息比较多,为了方便处理,需要每天创建一张表来记录更新的节目信息,当前数据库中已经有一张tbl_programme的表,每天创建的表的字段需要同tbl_programme保持一致,每天新创建的表的名称格式为tbl_programme_日期(例如:tbl_programme_20090214)规定每天晚上1点钟生成该天的新表。

相关阅读:

关于Oracle RAC中的job运行在哪个实例的理解

Oracle job不执行的分析处理

Oracle job interval规则

学习Oracle环境中job创建

  第一步:创建一个执行创建操作的存储过程

  在这一步首先要解决的问题就是构造表名。在Oracle中格式化输出时间可以用to_char函数来处理,例如:

  SQL> select to_char(sysdate, ’yyyy/mm/dd hh24:mi:ss’) from dual;
  TO_CHAR(SYSDATE,’YYYY/MM/DDHH2
  ------------------------------
  2009/02/14 17:22:41
  --以上SQL格式化输出了时间,要得到我们所需要的格式直接修改一下SQL即可
  SQL> select to_char(sysdate, ’yyyymmdd’) from dual;
  TO_CHAR(SYSDATE,’YYYYMMDD’)
  ---------------------------
  20090214

  得到时间格式字符串后我们就可以将表名的前缀和时间连接在一起形成完整的表名。这里需要注意,在Oracle中连接两个字符串需要使用‘||’符号,而在Sql Server中直接使用‘+’号就可以了,因为我以前一直在Sql Server下编程,好久都没编写Oracle的SQL所以费了很大的功夫才发现这个问题。完整的Sql就是

  SQL> select ’tbl_programme_’ || to_char(sysdate, ’yyyymmdd’) from dual;

  ’TBL_PROGRAMME_’||TO_CHAR(SYSD

  ------------------------------

  tbl_programme_20090214

  接下来就是创建表的代码了,因为新表需要tbl_programme保持一致,所以直接CTAS来创建表那是非常适合的了,代码如下:

  Create table tablename as select * from tbl_programme

  如果需要指定一个TableSpace则将该SQL做适当修改:

  Create table tablename tablespace p2p as select * from tbl_programme

  所以整个创建存储过程的SQL就是

  create or replace procedure sp_createtab_tbl_programme
  Authid Current_User
  as
  tabname varchar(200);
  begin
  select ’TBL_PROGRAMME_’ || to_char(sysdate, ’yyyymmdd’) into tabname fromdual;
  --create table tabname as select * from tbl_programme where 1 != 1;
  execute immediate ’create table ’ || tabname ||’ tablespace p2p as select* from tbl_programme where 1 != 1’;
  commit;
  end;
  /

  这里还需要注意一下在Oracle里面如果要对一个变量赋值的话有两种方式:

  (1)使用:=进行赋值

  (2)使用select ‘xjkxj ’ into 变量名称 from tabname

  另外,在存储过程中定义变量的时候一般放在as/is后begin前面。在存储过程一般是不能直接使用create table,truncate table这类似的语句的,如果要使用这些语句必须使用excute immediate + 所要执行的sql语句来实现。

  注意上面用红色标志的语句:Authid Current_User

  这个语句比较重要,如果我们在创建存储过程的时候不添加这条语句执行该存储过程将不会成功,原因是默认情况向存储过程是没有Create table等权限的,即使当前用户有DBA的权限也不行,如果存储过程中存在创建表的操作,可以有以下两种方式来解决该问题。

  (1)显示的赋予该用户Create table的权限,grant create table to user.

  (2)在存储过程中使用Authid Current_User 标识使用当前用户的权限。


    
 
 

您可能感兴趣的文章:

  • 怎么写一个Shell来执行这样的功能,访问Oracle数据库,然后执行一个SQL脚本,生成一个文件。急!
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • oracle 可以在crontab 中定时执行吗?
  • oracle sql执行过程(流程图)
  • linux能够通过执行脚本添加oracle数据库的用户吗
  • ORACLE安装时/tmp/orainstRoot.sh 执行发生错误
  • 求救:HPUNIX下的ORACLE7执行select * from tablename提示权限不足!!
  • 为什么 export ORACLE_SID=test写在程序里面就不会执行?
  • 请问在 Linux 下如何用代码实现连接oracle数据库 并 执行 SQL 语句?
  • shell调用oracle储存过程,怎么判断储存过程执行结果是否正确
  • shell 执行oracle sql脚本的问题
  • oracle单库彻底删除干净的执行步骤
  • 查看Oracle的执行计划一句话命令
  • 关于ORACLE中执行批处理的问题
  • oracle中得到一条SQL语句的执行时间的两种方式
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • Nagios check_oracle_health 关于执行SQL问题
  • 执行Commit时Oracle做哪些工作
  • RedHat AS 4 安装oracle9i的时候,执行Disk1下的runInstaller后提示正在初始化虚拟机,请等待后就再无反应
  • JBUILDER如何执行ORACLE的储存过程
  • linux中定时任务 oracle用户该如何做?
  • 为Oracle增加计划任务
  • Oracle经验分享:GATHER_STATS_JOB 任务
  • 利用windows任务计划实现oracle的定期备份
  • Oracle数据库设置任务计划备份一周的备份记录
  • Oracle案例详细分析:Job任务停止执行
  • PL/SQL实现Oracle数据库任务调度
  • 在Oracle中手工对任务进行分区的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 哪位大哥奉献一段调试通过的oracle中存取图片的例子oracle8.1.7,resin-2.1.6
  • 怎么直接通过JDBC连接oracle?
  • windows通过TCP/IP怎么连接到solaris上的oracle?
  • 急。。。在servlet如何连接到oracle(不通过odbc)
  • linux下通过对文件读取方式查询oracle的版本信息
  • 如何在UNIX上通过ODBC操纵Oracle等DBMS???
  • Window客户端通过ADO是否能够连接和操作Unix平台下的Oracle数据库?
  • 可否直接通过JDBC 连上Oracle(我并没有装oracle)
  • 通过win2000在linux上安装oracle,需要一个什么工具?在哪有下?
  • windows下通过ie访问不到linux环境下的oracle em
  • Linux/UNIX下,C++程序通过那些步骤访问Oracle或者Sybase SQL数据库?
  • 通过Oracle发送Email的实现方法
  • unix通过crontab 定时启动oracle应用程序??????????
  • 通过进程id号知道一个Oracle会话所占用的内存
  • oracle通过行范围查询取4至10行
  • apache通过php的oci函数读取Oracle(字符集ZHS16GBK)时,显示乱码,如何解决?
  • 通过一晚上.在2000上装了REDHAT9.再装ORACLE9I
  • 我准备装linux 7.3,大家能给点意见吗,我1GB的内存,那么交换区设多大? oracle9i能在7.3上通过吗?
  • 通过libsqlora8-2.2.10--c语言程序连接oracle数据库,需要连接,查询,修改等,急!!!
  • 详解通过Backup Exec来实施Oracle灾难恢复
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,