日期:2014-05-16 浏览次数:20447 次
使用存储过程的好处:
第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
第二、提高安全性。假如将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)