java 生成临时表_存储过程生成临时表用从临时表中取数据

这两天工作还行,工作的内容就是写存储过程,对于我这个没有写过存储近程的人来说,还是有一定困难的.不过还好,在众多资源的帮助下,万事OK呀,哈哈.下面就是我写的两个存储过程.

其一:对数据库中的原表进行每天的备份;

其二:通过对最新的备份表进行取值操作,通过判断,向原表中插入数据.

其实这两个存储过程也没有什么难的,一方面我是这方面的新手,另一方面要操作一个临时表,而且要从中取得数据(没有传入值),我在网上找了一下,没有什么成功的例子,所以,把我这两天的成果晒一下.

先说几个关键词(我用的时候,没少为这几个词费脑子)

1.       execute Immediate,一个执行动态SQL的东东,在每天生成备份表时,立下了汉马功劳.我的表名为:原表名+yyyymmdd

2.       creat table 表名 as select * from 已有表.这是一个创建表,我认为最快的一种方法,在创建表的同时,也可以直接把已有表中的数据也一起copy过来,呵呵,很是神奇

3.       sys_refcursor,这是一个cursor,很怪异的一个cursor,能够生成动态的cursor,可以多用一些,

下面我写的存储过程,主要地业务逻辑去掉了,主要说一下过程

1.      每天生成表备份的存储过程

create or replace procedure P_HOLD_COPY Is

--每天结算时,为当天的持股做备份

--得到表名为原表名+yyyymmdd的格式

table_name Varchar2(20) := 'test'||To_char(Sysdate,'yyyymmdd');

Begin

execute Immediate 'Create Table '||table_name||' As Select * From T_STOC_HOLD';

Commit;

end P_HOLD_COPY;

2.       从备份表中取得数据,然后根据数据,对原表进行操作

create or replace procedure P__SHARE  is

--******************************************************************

--存储过程名称:P_SHARE

--功能描述:对备份表进行数据操作

--******************************************************************

balance Number;

totalmoney Number;

h_amount Number;

allot_stock Number;

allot_money Number;

str Varchar2(1);

v_product_oid Varchar2(32);

table_name Varchar2(20);

sqlstr Varchar2(1000);

v_allot_row t_stoc_allot%rowtype;

v_hold_row t_stoc_hold%rowtype;

Cursor c_allot is select * from t_stoc_allot where to_char(t_stoc_allot.regdate,'yymmdd') < to_char(sysdate+1,'yymmdd') And (t_stoc_allot.is_allot Is Null Or t_stoc_allot.is_allot='1');

c_hold sys_refcursor  ;

Begin

open c_allot;

loop

fetch c_allot into v_allot_row;

table_name :=  'T_STOC_HOLD'||To_char(v_allot_row.regdate,'yyyymmdd');

v_product_oid := v_allot_row.product_oid;

sqlstr := 'select * from '||table_name||' where stock_code='||v_product_oid;      exit when c_allot%NOTFOUND;

open c_hold For sqlstr ;        loop

fetch c_hold into v_hold_row;

exit when c_hold%NOTFOUND;

end loop;

close c_hold;

end loop;

close c_allot;

Commit;

end P_SHARE;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值