oracle开发笔记。
1. 建立自增id字段:
a. 先建表,将要建自增id字段为number类型:
b. 建序列sequences
c. 建立触发器,一定要是before类型的。
d. 到此自增id字段就建立完成了。
2. 存储过程,写法,循环,异常实例。
create or replace procedure "datatransfer" as
processingstatuscount number; -processingstatus表记录数(根据useid设置值判断,为1正常)
useidnumber; -使用哪一个useid作为当前状态处理。
currindexnumber; -当前处理位置。
maxindexnumber; -此次执行的最大位置。
countstatusnumber; -统计状态0:正常,1:错误。
distractstatus number; -数据转移状态0:正常,1:错误。
deletestatusnumber; -删除状态0:正常,1:错误。
processflagnumber; -处理方式0:处理今天(含今天)以前的,1为前一天以前的 ,2为前二天以前的。以此类推。
eachmaxnumber; -每次处理最大数。
--异常退出。
countexception number; -允许统计异常最大值。
distractexception number; -允许数据转移异常最大值。
deleteexception number; -允许删除数据异常最大值。
allexceptionnumber; -允许所有异常最大值。
--临时值。
tmepmaxindexnumber; -最后用作存储当前最大id
begin-初始化。
processingstatuscount :=0;
useid1;
currindex0;
maxindex0;
countstatus1;
distractstatus1;
deletestatus1;
processflag0;
eachmax300000;
countexception5;
distractexception :=5;
deleteexception5;
allexception10;
tmepmaxindex0;
--先根据指定useid判断是否有值。
select count(useid)
into processingstatuscount
from processingstatus
where useid = useid;
--如果没有先初始化processingstatus,否则取当表中值。
if (processingstatuscount = 0) then
mergeprocessingstatus(useid,0,0,0,0,0);
elseselect currindex,maxindex,countstatus,distractstatus,deletestatus
into currindex,maxindex,countstatus,distractstatus,deletestatus
from processingstatus where useid = useid;
end if;
--处理以前未处理完的。
if(currindex < maxindex) then
begin--当以前处理的位置全部成功时,此次应在加一个位置上继续处理。
--同时打开各处理状态。
if( countstatus =0 and distractstatus = 0 and deletestatus = 0)then
begincurrindex :=currindex + 1;
countstatus :=1;
distractstatus :=1;
deletestatus :=1;
end;end if;
跳到此处重复执行。
while(currindex begin
先统计。if(countstatus = 1) then
begin调用统计存储过程传id段, currindex,currindex+eachmax
statistics(currindex,currindex+eachmax);
更新处理状态。
countstatus :=0;
distractstatus:= 1;
deletestatus :=1;
mergeprocessingstatus(useid,currindex,maxindex,0,1,1);
exception when others then
countexception :=countexception - 1;
allexception :=allexception - 1;
dbms_'您还有'||countexception||'次(统计)机会,共'||allexception||'次机会');
if(countexception <=0 or allexception <=0) then
return;
elsegoto label_pre_error;
end if;
end;end if;
转移数据。if(distractstatus = 1) then
begin调用转移数据存储过程。
transfer(currindex,currindex+eachmax,processflag);
distractstatus:= 0;
deletestatus :=1;
更新状态。mergeprocessingstatus(useid,currindex,maxindex,0,0,1);
exception when others then
distractexception :=distractexception - 1;
allexception :=allexception - 1;
dbms_'您还有'||distractexception||'次(数据转移)机会,共'||allexception||'次机会');
if(distractexception <=0 or allexception <=0) then
return;
elsegoto label_pre_error;
end if;
end;end if;
oracle笔记
1 查看表的结构 desc tabledescription 2 set timing on 打开操作表的时间记录。3 消除重复行 distinct 4 大小写不区分的是列名,而不是里面的数据。1 可以对某一列直接进行加减乘除。两列相加。2 如果有一列为null,所得结果也为空。使用nvl函数处理n...
Oracle笔记
第1页1.oracle 的使用 1.1.sqlplus 的命令 初始化表的位置 set nls lang american 设置编码才可以使用下面脚本 cd oracle home rdbms cd demo 我们目前使用的是oralce 9i 9201 版本 select from v versi...
oracle笔记
clear 清屏。col title for a20 设置title的字符最多有20个。oracle介绍。rdbsrdb 基本的存储结构是,二维表。表头。行。列。字段。sql的分类 dsl 关键字 select dml 操作 insert delete update ddl 定义 create dr...