存储过程,就是带有名字的一个程序块。
是指程序块创建之后,存储在数据库内部,然后我们可以在自己写的程序中通过某种手段调用这段程序。
一般是通过存储过程的名字来调用,就类似使用一个方法或者函数一样。可以设置是否传入参数,和是否有返回值。
调用完后这段程序块就会自动做一些操作,做的操作就是我们定义的存储过程的内容。比如像某张表插入某些数据,或者根据条件修改某条数据。
存储过程的优点:1、存储过程因为SQL语句已经预编绎过了,因此运行的速度比
较快。
2、存储过程运行比较稳定,不会有太多的错误。
3、存储过程可以在单个存储过程中执行一系列 SQL 语句。
4、存储过程可以从自己的存储过程内引用其它存储过程,这可
以简化一系列复杂语句。…等其他优点
(不同的数据库的存储过程,都是用当前自己这个数据库的编程语言来编写的,下面举例oracle中的用法)
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
//存储过程内容
END ;
2.if判断
IF L_COUNT <> 0 THEN
XXXX--需要执行的操作代码
END IF;
3.while循环
WHILE V_TEST<10 LOOP
BEGIN
XXXX--需要执行的操作代码
END;
END LOOP;
4.变量赋值
L_TEST := 123;
5.select查询结果存入变量中,可以同时存入多个列到多个变量中,要确保至少查到一条数据,否则会返回一个错误:nodatafound。(可提前做个判断,select count(*) …)
SELECT NO,NAME
INTO L_NO,L_NAE
FROM T_STUDENT
WHERE ...
6.可以在存储过程中调用存储过程,与程序中的方法和函数类似,若有参数则考虑确保传入的参数类型、数量、顺序一致,还可以设置返回值。
简单例子:
CREATE OR REPLACE PROCEDURE P_STUDENT
/*CREATE OR REPLACE PROCEDURE是让数据库开始创建存储过程,后面紧接着存储过程的名称,若已经存在,执行后则覆盖原先的存储过程*/
(/*括号里为存储过程需要的参数,可定义为传入,也可定义为传出,还可以同时定义为传入传出类型*/
M_STUDENT_NO IN NUMBER,--(传入)参数1 STUDENT_NO
M_SCORE IN NUMBER, --(传入)参数2 NAME
RES IN OUT VARCHAR2 --(传入传出)参数3 RES <最后一个参数不需要添加符号','>
) AS
--定义存储过程中需要用到的变量
L_COUNT NUMBER;
L_NAME VARCHAR2(50);--类型(值范围)
L_SCORE NUMBER;
BEGIN --开始(BEGIN END中至少有一句语句,可以为NULL)
RES: = '';
--存储过程内容
SELECT COUNT(*)
INTO L_COUNT
FROM T_STUDENT STU
WHERE STU.NO = STUDENT_NO;
IF L_COUNT > 0 THEN --if循环的固定格式
//修改
UPDATE T_STUDENT
SET SCORE = M_SCORE
WHERE NO = M_STUDENT_NO;
//查询
SELECT NAME,SCORE
INTO L_NAME,L_SCORE
FROM T_STUDENT STU
WHERE STU.NO = M_STUDENT_NO;
//返回值
RES := '学生:'||L_NAME|| '成绩:'||M_SCORE ; --通过||来连接字符串与变量值
END IF;--if循环的固定格式
END ;--结束