1.定義:ストアドプロシージャは、プリコンパイルされたセットのSQL文のセットです。
2.利点:、冗長性を減らす、再利用性を向上させるには、サーバーと対話する接続数を減らし、コンパイルSQLの数を減らします。
ストアドプロシージャを作成するための3構文
CREATE PROCEDURE ストアドプロシージャ名(パラメータリスト) BEGIN 手続きの本体と、 END
4.パラメータリストは、3つの部分から構成:パラメータ・モード(IN / OUT /アウト〜中)、パラメータ名、パラメータの型
パラメータモード:
中:発信者は、パラメータのJavaと同様に、必要
アウト:Javaのリターンに類似の戻り値として
アウト〜中:呼び出し側によって渡されたパラメータに対応する値を返すことが
手続きの場合本体のみを次いで、対応する文が終了を開始省略してもよい。
手順SQLステートメントの本体のそれぞれの端部は、セミコロンする必要があり、
再設定マークのストアドプロシージャに必要な終了区切りフラグストアドプロシージャ。
5.コールストアドプロシージャ
CALLストアドプロシージャ名(引数);
6.ケース
従業員テーブルを構築し、部門表、ロールテーブル
リファレンス#空構成された 区切り$ CREATE PROCEDURE ADD1() BEGIN SELECT 'SDを'; ENDドル CALLのRADDを();
#带IN 模式的存储过程 #通过部门名称查询对应的员工信息 DELIMITER $ CREATE PROCEDURE empinfo(IN dept_name varchar(20)) BEGIN SELECT e.e_id, e.e_name, d.dept_name FROM employee e RIGHT JOIN department d ON e.dept_id=d.dept_id WHERE d.dept_name=dept_name; END $ CALL empinfo('开发部')
#通过员工部门名称和角色信息,查询员工是否存在,如果存在则显示存在两字,否则显示不存在 DELIMITER $ CREATE PROCEDURE empinfo1(IN dept_name VARCHAR(20),IN r_name VARCHAR(20)) BEGIN DECLARE result int DEFAULT 0; SELECT count(*) INTO result FROM emoloyee e LEFT JOIN department d ON e.dept_id=d.dept_id LEFT JOIN role r ON r.r_id=e.r_id WHERE d.dept_name=dept_name AND r.r_name=r_name; SELECT IF(result>0,'存在','不存在'); END $ CALL emploinfo1('开发部','一级管理员');
#带out的存储过程 #传入员工姓名显示对应的部门名称 DELIMITER $ CREATE PROCEDURE empdep(IN empName VARCHAR(20),OUT deptName VARCHAR(20)) BEGIN SELECT d.dept_name INTO deptName FROM employee e LEFT JOIN department d ON e.dept_id=d.dept_id WHERE e.e_name=empName; END $ #调用 CALL empdep('据',@DeptName); SELECT @DeptName;
#通过员工姓名返回员工对应的部门名称和角色名称 CREATE PROCEDURE deptNameAndRoleName(IN emp_name VARCHAR(10),OUT dep_name VARCHAR(20),OUT rol_name VARCHAR(20)) BEGIN SELECT d.dept_name 部门名称,r.r_name 角色名称 INTO dep_name,rol_name FROM employee e LEFT JOIN department d ON d.dept_id=e.dept_id LEFT JOIN role r ON r.r_name=e.r_name WHERE e.e_name=emp_name END $ #调用 CALL deptNameAndRoleName('hjbj',@deptNAME,@ROLEnaME) #查看变量 SELECT @deptNAME,@ROLEnaME;
#创建IN~OUT #传入对应的工资计算年薪 DELIMITER $ CREATE PROCEDURE salaryss(INOUT s1 DOUBLE,INOUT s2 DOUBLE) BEGIN SET s1=s1*12; SET s2=s2*12; END #调用 set @s1=1000; set @s2=1200; CALL salaryss(@s1,@s2); SELECT @s1,@s2
7.删除存储过程(一次只能删除一个)
DROP PROCEDURE 存储过程名;
8.查看存储过程
SHOW CREATE PROCEDURE 存储过程名
9.修改存储过程(一般创建好不允许修改)