/*
创建序列
*/
--1.用户序列
create sequence user_seq
increment by 1
minvalue 1
start with 1
maxvalue 9999;
--初始值从1开始,每次跳跃区间值为1,最大值为9999
/*
触发器
*/
--1.1.添加用户时的触发器
create or replace trigger add_user_tri
before insert
on t_user
for each row
begin
select user_seq.nextval into :new.u_id from dual;
end;
--user_seq 为建立在数据中的序列sequence的名称
说明:在并发系数不大的时候可以使用触发器来解决oracle表主键的添加问题,每次在有数据插入动作时触发,自动加入主键的值,免去了手动调用sequence的麻烦。但是在高并发的系统中不建议使用触发器。
/*
游标:用一个简单示例来说明
*/
create or replace function test_cur(parm number) return varchar2
as
res varchar2(20);
tmp varchar2(30);
cursor cur_user is
select username from sys_user;
begin
if parm is null then
res := '';
else
--****************开启游标******************
open cur_user;
--循环取游标值对比入参
loop
fetch cur_user into tmp; --将游标值赋值给tmp字段
exit when cur_user%notfound; --当游标走完后退出循环
if ... then
...
elsif ... then
...
else
...
end if;
end loop;
close cur_user ;
--================关闭游标=================
res := tmp;
end if;
return res;
exception
when others then
begin
res := '';
return res;
end;
end;
/*
存储过程
*/
--1.添加用户
create or replace procedure add_user_proc
(
uName in t_user.uname%type,
uPass in t_user.upass%type,
uEmail in t_user.email%type
) is
--变量声明
v_err varchar(500)
begin
insert into t_user(uName,uPass,email) values(uName,uPass,uEmail);
commit;
exception
when others then
v_err:=sqlerrm;
--此处为异常处理模块,可记录相应异常信息,sql执行异常信息记录在系统变量“sqlerrm”中,但是要获取里面的信息需要指定给声明的变量,例如:上面声明了变量v_err,这里将异常赋值给它。
rollback;
end;
--uName ,uPass ,uEmail 三个参数是需要外面传入的参数,数据类型这里设置的为相应数据表“t_user”对应字段“uname”的数据类型,也可以手动指定,例如:varchar2(32);
/*
函数方法
*/
CREATE OR REPLACE FUNCTION to_bignum(v_num number) return VARCHAR2 as
res VARCHAR2(50);
begin
if v_num is null then
res := '00';
else
if v_num < 10 then
res := '0' || to_char(v_num);
else
res := to_char(v_num);
end if;
end if;
RETURN res;
end;
--此函数用来处理日期格式字符,例如:6月20日,需要指定的格式为06月20日,这里就要将6变为06