mysql procedure人门学习笔记(1)

#创建resources表 #resources自关联
CREATE TABLE tt_Resources(
id BIGINT NOT NULL ,
title VARCHAR(255),
intro VARCHAR(255),
src   VARCHAR(255),
onoff TINYINT(255),
resources_id VARCHAR(255),
PRIMARY KEY(id)
);

ALTER TABLE tt_Resources ADD CONSTRAINT parent_resources
FOREIGN KEY(resources_id) REFERENCES tt_Resources(id) ON DELETE SET NULL;

CREATE PROCEDURE select_employee(IN parameter INTEGER)
BEGIN
IF parameter=0 THEN
SELECT * FROM employee ORDER BY id asc;
else
SELECT * FROM employee ORDER BY id desc;
END if;
END;

CREATE PROCEDURE test_p(IN isLimit boolean,IN prow INTEGER)
BEGIN
IF
isLimit THEN
SELECT prow;
SELECT * FROM bb_menu_new limit 0,3;
END IF;
END;

预编译:
创建:PREPARE stmt1 FROM "SELECT * FROM bb_menu_new where id=?"
执行:EXECUTE stmt1 USING @x;
销毁:DEALLOCATE PREPARE stmt2;

分页:
CREATE PROCEDURE page(IN wh VARCHAR(150) ,IN st INT,IN sz INT)
BEGIN
DECLARE menuSql VARCHAR(255) DEFAULT 'SELECT * FROM bb_menu_new';
IF
wh IS NOT NULL THEN
SET menuSql=CONCAT(menuSql," WHERE ",wh);
END IF;
IF
sz IS NOT NULL THEN
SET menuSql=CONCAT(menuSql," limit ",st,sz);
END IF;
SELECT menuSql;
SET @sql=menuSql;
PREPARE menuStatement FROM @sql;
EXECUTE menuStatement;
DEALLOCATE PREPARE menuStatement;
END;

1.DECLARE 程序处理 (若果报错 '21S01' 则会执行 SET @x=1; 并跳过该错误语句)
CREATE PROCEDURE handlerdemo()
BEGIN
DECLARE flag CONDITION FOR SQLSTATE '21S01';
DECLARE CONTINUE HANDLER FOR flag SET @x=1;
INSERT INTO bb_menu_new VALUES(1);
END;




2.CURSOR  (相当于java的result结果集 )
CREATE PROCEDURE cursordemo()
BEGIN
DECLARE  a VARCHAR(255);
DECLARE   b VARCHAR(255);
DECLARE cursor1 CURSOR FOR SELECT text,url FROM bb_menu_new;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET @x=10;
OPEN cursor1;
REPEAT
FETCH cursor1 INTO a,b;
SELECT a,b;
FETCH cursor1 INTO a,b;
SELECT a,b;
UNTIL true END REPEAT;
CLOSE cursor1;
END;

3.CASE 语句
CREATE PROCEDURE casedemo()
BEGIN
DECLARE age INT DEFAULT 3;
CASE
WHEN age=1 THEN
SELECT * FROM bb_menu_new;
WHEN age=3 THEN
SELECT 3 as error;
END CASE;
END;

4.LOOP循环语句
CREATE PROCEDURE loopdemo()
BEGIN
DECLARE i INT DEFAULT 0;
lable:LOOP
SET i =i+1;
SELECT i;
/*IF i<10 THEN ITERATE lable;END IF;
LEAVE lable;
*/
IF i>=10 THEN
LEAVE lable;
END IF;
END LOOP lable;
END;

5.REPEAT 语句 (满足条件跳出)
CREATE PROCEDURE repeatdemo()
BEGIN
DECLARE i INT DEFAULT 0;
REPEAT
SET i=i+1;
SELECT i;
UNTIL i>=10 END REPEAT;
END;
6.WHILE 语句(满足条件循环)
CREATE PROCEDURE whiledemo()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i<=10 DO
SET i=i+1;
SELECT i;
END WHILE;
END;

猜你喜欢

转载自honcur.iteye.com/blog/1872462