データベースのデータは全く見ての最初の1、
図2に示すように、パラメータなしのストアドプロシージャ
- 1のMySQLから分離、セット・ DELIMITER & - 2削除されるストアドプロシージャは、PROC1存在する場合 DROP PROCEDURE IFが EXISTS proc1` ` & - 3ストアドプロシージャが定義されている(非参照) CREATE PROCEDUREの(PROC1)を BEGIN - SQL指定実行4. SELECT COUNT(*)FROM T1 T WHERE t.name LIKE ' %1%' ; エンド - 5の端 & - セット;のMySQLから6セパレータ デリミタと、 - - 7.ストアドプロシージャ呼び出し コールするProc1(); -ストアドプロシージャが削除された場合8 PROC1存在 DROP PROCEDURE IFは EXISTS PROC1を、
3、パラメータを渡します
- 1のMySQLから分離、セット・ DELIMITER & - 2削除されたストアドプロシージャが存在する場合PROC1 DROP PROCEDURE IFが EXISTS proc1` ` & - 3.定義ストアドプロシージャ(着信パラメータ、文字列型) CREATE PROCEDUREするProc1(IN N- CHAR ) BEGIN - SQLを指定した実行4. SELECT COUNT(*)FROM T1 T WHERE t.name LIKE CONCAT(' %'、N - 、' %' ); END - 5の端部 とを - 前記のMySQLから分離するステップと、セット; DELIMITER; - 7.設定変数 SETを @name = ' 1 ' ; - パラメータを渡し、8ストアド・プロシージャ・コール CALLするProc1(@name ) - 。9ストアドプロシージャPROC1がある場合は、削除 DROP PROCEDURE IFが 存在する PROC1を、
4、インバウンドとアウトバウンドのパラメータ
-- 1.将mysql分隔符从;设置为& DELIMITER & -- 2.如果存在存储过程proc1则删除 DROP PROCEDURE IF EXISTS `proc1` & -- 3.定义存储过程(传入参数,类型字符串。传出参数,类型整型) CREATE PROCEDURE proc1(IN n CHAR, OUT c INT) BEGIN -- 4.执行指定sql(into就是把数据放到指定变量里,这里就是放到c) SELECT COUNT(*) INTO c FROM t1 t WHERE t.name LIKE CONCAT('%',n,'%'); END -- 5.结束 & -- 6.将mysql分隔符从;设置为; DELIMITER ; -- 7.设置变量 SET @name='1'; SET @count=0; -- 8.调用存储过程,传入传出参数 CALL proc1(@name, @count); -- 9.打印 SELECT @count; -- 10.如果存在存储过程proc1则删除 DROP PROCEDURE IF EXISTS proc1;
5、动态sql(无参)
-- 1.将mysql分隔符从;设置为& DELIMITER & -- 2.如果存在存储过程proc1则删除 DROP PROCEDURE IF EXISTS `proc1` & -- 3.定义存储过程(无参) CREATE PROCEDURE proc1() BEGIN -- 4.声明变量 DECLARE $sqltext VARCHAR(1000); -- 5.动态sql SET $sqltext = 'SELECT COUNT(*) FROM t1 t where t.name like \'%1%\';'; -- 一直需要这,不然会报错,目前没有找到资料 SET @sqlcounts := $sqltext; -- 6.预编释,stmt预编释变量的名称 PREPARE stmt FROM @sqlcounts; -- 7.执行SQL语句 EXECUTE stmt; -- 8.释放资源 DEALLOCATE PREPARE stmt; END -- 9.结束 & -- 10.将mysql分隔符从;设置为; DELIMITER ; -- 11.调用存储过程,无参 CALL proc1(); -- 12.如果存在存储过程proc1则删除 DROP PROCEDURE IF EXISTS proc1;
6、动态sql,传入传出参数
-- 1.将mysql分隔符从;设置为& DELIMITER & -- 2.如果存在存储过程proc1则删除 DROP PROCEDURE IF EXISTS `proc1` & -- 3.定义存储过程(传入参数,类型字符串。传出参数,类型整型) CREATE PROCEDURE proc1(IN n CHAR, OUT s INT) BEGIN -- 4.声明变量 DECLARE $sqltext VARCHAR(1000); -- 5.动态sql,把sql返回值放到@ret_date中 SET $sqltext = CONCAT('SELECT COUNT(*) into @ret_date FROM t1 t where t.name like \'%', n, '%\''); -- 一直需要这,不然会报错,目前没有找到资料 SET @sqlcounts := $sqltext; -- 6.预编释,stmt预编释变量的名称 PREPARE stmt FROM @sqlcounts; -- 7.执行SQL语句 EXECUTE stmt; -- 8.释放资源 DEALLOCATE PREPARE stmt; -- 9.获取动态SQL语句返回值 SET s = @ret_date; END -- 10.结束 & -- 11.将mysql分隔符从;设置为; DELIMITER ; -- 12.设置变量 SET @name='1'; SET @count=0; -- 13.调用存储过程,传入传出参数 CALL proc1(@name, @count); -- 14.打印 SELECT @count; -- 15.如果存在存储过程proc1则删除 DROP PROCEDURE IF EXISTS proc1;
参考文章:https://www.cnblogs.com/end/archive/2011/04/01/2002662.html