//author 满晨晨
//time 2009 4 24上午
clob初始化为empty-clob()
blob初始化为empty-clob()
ed a
@ a
sequence序列
序列号 每次读取它会自动增加 一般用在需要序列号排序的地方
create sequence 序列名称
increment by 增量
start with 起始数字
nomaxvalue/maxvalue 数字
nocycle/cycle
cache 数字;
nomaxvaue 只能搭配nocycle 用
maxvaue cycle 或者nocycle搭配用
序列命名规则
seq_数据库名称
create sequence seq_db
start with
increment by 1
maxvalue 10
nocycle
cache 2;
dual是经常用来系统测试的表
序列名字.currval nextval
create sequence seq_1
start with 1
increment by 1
maxvalue 100
cycle/nocycle
cache 2;
创建序列 1到100 然后再回到1到100
declare
sname number(3):=1;
begin
loop
insert into emp(empno,ename,hiredate,deptno)values(seq_1.nextval,'aa'||sname,sysdate,30);
sname:=sname+1;
exit when sname>1000;
end loop;
end;
无法例程化石因为到了最大值了 改改序列的循环maxvalue
同一个语句多此调用nextvalue是同样的数值
代理主键 统一为ID
没有实际含义 只起到唯一标志一条记录的作用
主键因为一般不能更改 起到唯一标志的作用 可是有些主键可以被更改
如学号等等作主键 代理主键就来作为唯一标志 一定要选没有实际含义
id varchar2(32) 一般用户 max地址 系统时间来定义
存储过程
把begin
end之间的业务逻辑存下来 好直接被引用
procedure
create or replace procedure 名称
(
para1 in/out datetype, in传入的参数 (insert时候)在过程中不能被修改 out 返回值 在过程中可以被修改
para1 in/out datetype
)
as /is
begin
do
end 过程名称;
exec 存储过程的名字 :调用存储过程
存储过程不能用declare声明变量
要想用声明变量
()如上面的
create or replace procedure p_b
(
v_id in varchar2,
v_name in varchar2,
v_psw in varchar2,
v_address in varchar
)
as
begin
insert into t_user(id,name,psw,address)values
(v_id,v_name,v_psw,v_address);
end;
插入数据 对内的 所以用in
如果对外输出的话变量用out
exec p_b(354,546,'456sd','srf5');
procedure变量中不能声明变量类型的大小
create or replace procedure p_c
(v_id in number(12))错误的 这是自动扩展的 12不能用定义大小 也不能给它赋值 in是给它赋值的 出来的时候exec的时候给它赋值的
create or replace procedure p_c
(
v_id in number:=1,
v_name in number:=1,
v_psw in number:=1,
v_address in number:=1
)
as
begin
loop
insert into t_user(id,name,psw,address)values
('id'||v_id,'name'||v_name,'psw'||v_psw,'address'||v_address);
v_id:=v_id+1;
v_name:=v_name+1;
v_psw:=v_psw+1;
v_address:=v_address+1;
exit when v_id>200,v_name>200,v_psw>200,v_address>200;
end loop
end;
删除存储过程
drop procedure 过程名();
select table_name from user_table