赞
踩
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名字和参数(如果有)来执行它。存储过程可以在很多数据库管理系统(DBMS)中找到,如SQL Server、Oracle、MySQL等。
1. declare语句只能放在存储过程的开始位置,放在后面就会报错
2. if 语句的后面必须有then,但是不需要begin,在if结束时需要end if
3. 判断是否为NULL倒是和MSSQL一样都有IS NULL
4. delimiter是定界符的意思在结束的end后面要添加定界符
5. end if之后必须跟分号,否则语法错误
6. while后面跟条件,条件后面要跟一个do,在while循环体结束之后需要end while并以分号结束。
7. in 表入参(默认) , out 表出参 , inout 表出入参
8. 两种赋值方式: set ,select into
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
SET a = 0;
-- 代码
DELIMITER $$
CREATE PROCEDURE test1(IN ss VARCHAR(100))
BEGIN
SELECT ss ;
END $$
-- 调用
SET @s1 = '你好' ;
CALL test1(@s1) ;
--
-- 代码
- DELIMITER $$
- CREATE PROCEDURE testproce(IN score INT,OUT rs VARCHAR(200))
- BEGIN
- DECLARE sc INT;
- SET sc = score ;
- IF sc < 0 OR sc > 100 THEN
- SET rs = 'score error';
- ELSEIF sc > 80 THEN
- SET rs = 'A';
- ELSEIF sc > 60 THEN
- SET rs = 'B';
- ELSE
- SET rs = 'C';
- END IF ;
- END $$
-- 调用
SET @a1 =60;
SET @a2 = '';
CALL testproce(@a1,@a2);
SELECT @a2 ;
--
-- 代码
- DELIMITER $$
- CREATE PROCEDURE proc_add_looply(IN $className VARCHAR(200),INOUT $insertTimes INT)
- BEGIN
- WHILE $insertTimes>0 DO
- INSERT INTO classes VALUES(DEFAULT,$className);
- SET $insertTimes = $insertTimes - 1 ;
- END WHILE;
- COMMIT;
- END $$
-- 调用
SET @lp_1 = '班' ;
SET @lp_2 = 5 ;
CALL proc_add_looply(@lp_1,@lp_2);
--
-- 代码
- DELIMITER $$
- CREATE PROCEDURE show_job_dept(IN no2 INT,OUT job2 VARCHAR(100),OUT dno2 INT)
- BEGIN
- SELECT job,deptno INTO job2,dno2 FROM emp WHERE EMPNO = no2;
- END $$
-- 调用
SET @sjd_1 = 7369;
SET @sjd_2 = '';
SET @sjd_3 = 0;
CALL show_job_dept(@sjd_1,@sjd_2,@sjd_3);
SELECT @sjd_2 ;
SELECT @sjd_3 ;
--
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。