日期:2014-05-16  浏览次数:20447 次

oracle存储过程、触发器、序列基本用法

使用存储过程的好处:
第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。
第三、有利于SQL语句的重用。

oracle 存储过程的基本语法
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字(参数1 IN NUMBER, 参数2 IN NUMBER)
?IS
??变量1 INTEGER :=0;
??变量2 DATE;BEGIN
?END 存储过程名字

2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
?SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
?EXCEPTIONWHEN NO_DATA_FOUND
? THEN xxxx;
?END;
?
3.IF 判断
?IF V_TEST=1 THEN
? BEGIN
?? do something
? END;
?END IF;

4.while 循环
?WHILE V_TEST=1 LOOP
? BEGINXXXXEND;
?END LOOP;

5.变量赋值
?V_TEST := 123;
?
6.用for in 使用cursor
?...
?IS
?CURSOR cur IS SELECT * FROM xxx;
?BEGIN
? FOR cur_result in cur LOOP
? BEGIN
?? V_SUM :=cur_result.列名1+cur_result.列名2
? END;
? END LOOP;
?END;
?
?
7.带参数的cursor
CURSOR C_USER(C_ID NUMBER)
?IS
?SELECT NAME FROM USER WHERE TYPEID=C_ID;
? OPEN C_USER(变量值);
?? LOOP
??? FETCH C_USER INTO V_NAME;
??? EXIT FETCH C_USER%NOTFOUND;
??? do something
?? END LOOP;
? CLOSE C_USER;

?

?

例子:

create table system.UserLogin

(

?u_id number primary key,

?uname varchar2(20) not null,

?upass varchar2(20) not null,

?sex number(2),

?hobby varchar2(50),

?beizhu nvarchar2(100),

?xieyi number(1)

)

?

create sequence system.seq_u_id

start with 1--以1开始

increment by 1--自动增长2

nomaxvalue

cache 10

?

select *from system.userlogin

--drop table system.userlogin

?

?

select system.seq_u_id.nextval from dual;

?

create or replace trigger system.seq_uid_bifer_trigger

before insert on system.UserLogin

for each row

when(new.u_id is null)

begin

select system.seq_u_id.nextval into:new.u_id from dual;

end;

?

insert into system.userlogin(uname,upass,sex) values('zys','zys',1)


我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html