您的位置:首页 > 数据库 > Oracle

oracle 创建表并创建存储过程,通过存储过程将其他用户的信息导入到新建表中

2010-11-19 12:30 771 查看
---------------- 创建新序列 -------------------------
create sequence seq_封面标识
minvalue 1 --- 最小值
maxvalue 99999999999999 ---- 最大值
start with 1 -- 从 1 开始
increment by 1 -- 每次增加 1
cache 20
order;

---------------- 创建新表 -------------------------
CREATE TABLE T_封面信息(
标识列 int,
单位编码 varchar(20) NULL,
单位Id varchar(30)NULL,
单位名称 varchar(100) NULL,
单位级别 varchar(30) NULL,
总部代码 varchar(100) NULL,
企业单位名称 varchar(100) NULL,
填表人 varchar(20) NULL,
通讯地址 varchar(100) NULL,
邮政编码 varchar(10) NULL,
电话号码 varchar(20) NULL,
单位负责人 varchar(20) NULL,
财务机构负责人 varchar(20) NULL,
本企业代码 varchar(20) NULL,
上级企业代码 varchar(20) NULL,
组织形式 varchar(10) NULL,
企业类型 varchar(20) NULL,
级次 varchar(10) NULL,
报表类型 varchar(20) NULL,
经营规模 varchar(20) NULL,
所属行业 varchar(20) NULL,
日期 varchar(20) NULL,
年 varchar(10) NULL,
月 varchar(10) NULL,
合并个体 varchar(10) NULL,
ALone_ID varchar(30) NULL,
PRIMARY key(标识列) -- 标识列作为主键(也可不定义主键)
) ;

-- drop table T_封面信息
-- select * from T_封面信息

---------------- 创建存储过程 -------------------------
Create or replace Procedure P_封面信息
as
v_SQL1 varchar(2000); -- 先定义全局变量
v_delSql varchar(2000);
begin -- 开始

-------------------------------------------- 删除原有表中的数据
v_delSql := 'delete from T_封面信息 where 日期 >= '|| ''''|| add_months(sysdate,-6) || ''''; -- 拼接sql ,当期时间减去六个月
dbms_output.put_line(v_delSql); -- 打印出来
execute immediate v_delSql; -- 执行
commit; -- 提交

-------------------------------------------- 向表中插入数据
v_SQL1 := 'INSERT INTO T_封面信息
select SEQ_封面标识.nextVal, F.unit_code 单位编码,F.UNIT_Id 单位ID,F.UNIT_Name 单位名称,F.Level_code 单位级别 ,
A.m10010 总部代码,C.m10000 单位名称,
A.m10005 填表人,A.m10011 通讯地址,A.m10003 邮政编码,A.m10007 电话号码,A.m10008 单位负责人,A.m10002 财务机构负责人 ,
A.m10001 本企业代码,A.m10006 上级企业代码,B.m10003 组织形式,
case B.m10000 when''1'' then ''生产型'' when ''2'' then ''流通型'' when ''3'' then ''进出口型'' when ''4'' then ''服务型''
when ''5'' then ''管理型'' when ''6'' then ''房地产开发''end 企业类型, B.m10001 级次,
case when B.m10004 = 0 then 1 when B.m10004 = 8 then 0 when B.m10004 = 9 then 2 end 报表类型,
case when D.m10000 = 1 then ''大型'' when D.m10000 = 2 then ''中型'' when D.m10000 = 3 then ''小型'' end 经营规模,
case B.m10002 when ''1'' then ''服装'' when ''2'' then ''棉纺'' when ''3'' then ''毛纺'' when ''4'' then ''家用产业用纺织品''
when ''5'' then ''商贸及服务'' when ''6'' then ''房地产''end 所属行业,
E.inputDate 日期,subStr(E.Inputdate,1,4) 年,subStr(E.Inputdate,6,2) 月,
E.Ver 合并个体,A.alone_id
from IUFO1112.iufo_measure_data_jt6q5gan A
inner join IUFO1112.iufo_measure_data_o7qsn5es B on A.Alone_Id = B.ALONE_ID
inner join IUFO1112.iufo_measure_data_p6338ya4 D on A.Alone_Id = D.ALONE_ID
inner join IUFO1112.iufo_measure_data_s3xqdt9j C on A.Alone_Id = C.ALONE_ID
inner join IUFO1112.IUFO_MEASURE_PUBDATA E on A.ALONE_ID=E.ALONE_ID
inner join IUFO1112.IUFO_UNIT_INFO F on E.KeyWord1=F.UNIT_ID
where dr = 0 and E.inputDate >='|| ''''|| add_months(sysdate,-6) || '''';
dbms_output.put_line(v_SQL1);
execute immediate v_SQL1;
commit;
end P_封面信息; --- 结束存储过程

--- 在plsql 中执行 存储过程
begin
P_封面信息;
end;

--- 在 command 命令页面 执行存储过程
exec P_封面信息;
call P_封面信息

-- Select * from T_封面信息
-- drop table T_封面信息

--- 得到当前时间,并计算出六个月前的时间
select add_months(sysdate,-6) from dual;
select sysdate from dual;

---------------------- 定期执行存储过程 ---------------
-- P_封面信息 的定期执行
Declare
job1 number;
begin
dbms_job.submit(job1,'P_封面信息;',TRUNC(sysdate+1)+12/24,'TRUNC(sysdate+1)+2/24');
commit;
end;

将项目中的实例拿出来共享,以备后来的使用。语法容易忘记,这到是一个不错的记忆方法!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐