Oracle通过job按时成立表-入门底子[Oracle防范]
本文“Oracle通过job按时成立表-入门底子[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在项目中,常常会碰到需求按时完成的任务,比方按时更新数据,定义统计数据生成报表等等,其实这些事情都可以利用Oracle的Job来完成.下面就结合我们实行室项目实际,简单介绍一下在Oracle数据库中通过Job完成自动成立表的办法.
整个历程总共分为两步.固然整个历程都非常简单,但是关于初学Oracle的外行还是有很多地方需求注意的.
首先介绍一下,成立该JOB的后台,因为每天更新的直播和点播节目信息对比多,为了便利处理,需求每天成立一张表来记录更新的节目信息,当前数据库中已经有一张tbl_programme的表,每天成立的表的字段需求同tbl_programme保持一致,每天新成立的表的名称格局为tbl_programme_日期(比方:tbl_programme_20090214)规定每天晚上1点钟生成该天的新表.
第一步:成立一个履行成立操作的存储历程
在这一步首先要办理的问题就是构造表名.在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 from dual; --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 标识利用当前用户的权限.
以上是“Oracle通过job按时成立表-入门底子[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |