Oracle笔记

发布 2021-05-11 22:07:28 阅读 3070

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...