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

本文展示了如何在Oracle数据库中创建新序列、新表以及存储过程。存储过程用于删除表中六个月前的数据,并从其他表中插入新数据。涉及到的关键操作包括表的删除与创建、数据的清理与插入,以及存储过程的编写和执行。

----------------   创建新序列   -------------------------
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;

 

 

 

将项目中的实例拿出来共享,以备后来的使用。语法容易忘记,这到是一个不错的记忆方法!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值