簡単な例[MySQLは】パラメータ、送信パラメータを渡し、パラメータなしでストアドプロシージャ、動的SQL

データベースのデータは全く見ての最初の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

      https://blog.csdn.net/Peacock__/article/details/83030476

おすすめ

転載: www.cnblogs.com/xiaostudy/p/12325155.html