zoukankan      html  css  js  c++  java
  • Mysql Programming CS 155P笔记(三)

    CREATE PROCEDURE

    CREATE PROCEDURE sp_name ([proc_parameter[,...]])
        [characteristic ...] routine_body
    mysql> delimiter //
    
     
    
    mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    
        -> BEGIN
    
        ->   SELECT COUNT(*) INTO param1 FROM t;
    
        -> END
    
        -> //
    
    Query OK, 0 rows affected (0.00 sec)
    
     
    
    mysql> delimiter ;
    
     
    
    mysql> CALL simpleproc(@a);
    
    Query OK, 0 rows affected (0.00 sec)
    
     
    
    mysql> SELECT @a;
    
    +------+
    
    | @a   |
    
    +------+
    
    | 3    |
    
    +------+
    
    1 row in set (0.00 sec)
    

    由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数 默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词 OUT或INOUT 

    注意: 指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数)

    procedure需要使用call来调用

    CALL sp_name([parameter[,...]])

    CALL语句调用一个先前用CREATE PROCEDURE创建的程序。

    CALL语句可以用 声明为OUT或的INOUT参数的参数给它的调用者传回值


     

    CREATE FUNCTION

    CREATE FUNCTION sp_name ([func_parameter[,...]])
        RETURNS type
        [characteristic ...] routine_body
        
        proc_parameter:
        [ IN | OUT | INOUT ] param_name type
        
        func_parameter:
        param_name type
     
    type:
        Any valid MySQL data type
     
    characteristic:
        LANGUAGE SQL
      | [NOT] DETERMINISTIC
      | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
      | SQL SECURITY { DEFINER | INVOKER }
      | COMMENT 'string'
     
    routine_body:
        Valid SQL procedure statement or statements

    mysql> delimiter //
    
     
    
    mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
    
        -> RETURN CONCAT('Hello, ',s,'!');
    
        -> //
    
    Query OK, 0 rows affected (0.00 sec)
    
     
    
    mysql> delimiter ;
    
     
    
    mysql> SELECT hello('world');
    
    +----------------+
    
    | hello('world') |
    
    +----------------+
    
    | Hello, world!  |
    
    +----------------+
    
    1 row in set (0.00 sec)
    

    RETURNS字句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句 

    ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
     
    characteristic:
        { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
      | SQL SECURITY { DEFINER | INVOKER }
      | COMMENT 'string'


    DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name


    SHOW CREATE {PROCEDURE | FUNCTION} sp_name
    mysql> SHOW CREATE FUNCTION test.helloG
    *************************** 1. row ***************************
           Function: hello
           sql_mode:
    Create Function: CREATE FUNCTION `test`.`hello`(s CHAR(20)) RETURNS CHAR(50)
    RETURN CONCAT('Hello, ',s,'!')
    

      

    SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']

    mysql> SHOW FUNCTION STATUS LIKE 'hello'G
    *************************** 1. row ***************************
               Db: test
             Name: hello
             Type: FUNCTION
          Definer: testuser@localhost
         Modified: 2004-08-03 15:29:37
          Created: 2004-08-03 15:29:37
    Security_type: DEFINER
          Comment:
    

      

  • 相关阅读:
    ubuntu 安装 systemback
    嵌入式gdb远程调试
    pecl 安装 phpredis
    Linux服务器内存池技术是如何实现的
    统一登录的几种常用设计模式
    数据库并发控制
    抽取一部分服务端做BFF(Backend For Frontend服务于前端的后端)
    干货 | 质量保障新手段,携程回归测试平台实践 原创 Sedro 携程技术 2021-01-21
    服务端绘图
    中间件技术在百度云原生测试中的应用实践 原创 路由器 百度智能化测试 今天
  • 原文地址:https://www.cnblogs.com/ecwork/p/8461038.html
Copyright © 2011-2022 走看看