暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

Halo数据库对MySQL存储过程的兼容及使用

贾桂权 2024-11-01
558

    Halo数据库作为一款通用型数据库,特别注重兼容性,以适应不同的应用场景,满足企业的数据存储处理等需求。

一、前置条件

    Halo-mysql模式使用存储过程需要创建plmyssql扩展。

create extension plmyssql;

图片


二、存储过程的创建及调用

    1. 存储过程语法

CREATE     [DEFINER = { user | CURRENT_USER }]  PROCEDURE sp_name ([proc_parameter[,...]])     [characteristic ...] routine_body   proc_parameter:     [ IN | OUT | INOUT ] param_name type   characteristic:     COMMENT 'string'   | LANGUAGE SQL   | [NOT] DETERMINISTIC   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }   | SQL SECURITY { DEFINER | INVOKER }   routine_body:   Valid SQL routine statement   [begin_label:] BEGIN   [statement_list]     …… END [end_label]

通过Mysql协议对存储过程进行创建及管理

声明语句结束符,可以自定义:

 DELIMITER  $$ 或 DELIMITER //

2. 存储过程参数

    MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

CREATE PROCEDURE 存储过程名([[IN |OUT |INOUT ] parameter data_type...])
  • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)

  • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

  • INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

delimiter // create or replace procedure proc(in a int, in b int, out sum int)  begin      set sum = a + b;  end;  // call proc(1, 2, @var1);// select @var1;//

图片


3. 创建及调用存储过程

3.1 简单创建存储过程

mysql> delimiter // mysql> create or replace procedure proc1()     -> begin     ->     select * from dept where id =1;     ->     select * from emp where id = 1;     -> end;     -> // Query OK, 0 rows affected (0.00 sec)  mysql> call proc1()// +----+-----------+ | id | name      | +----+-----------+ |  1 | 研发部    | +----+-----------+ 1 row in set (0.00 sec)  +----+--------+--------+---------+------------+---------+ | id | name   | gender | salary  | join_date  | dept_id | +----+--------+--------+---------+------------+---------+ |  1 | 张三   | 男     | 7200.00 | 2013-02-24 |       1 | +----+--------+--------+---------+------------+---------+ 1 row in set (0.00 sec)  Query OK, 0 rows affected (0.00 sec)

3.2 声明和使用普通变量

delimiter //create procedure proc2()begin    declare de_name varchar(10) default '';    set de_name = "abc";    set @var = de_name;end;// call proc2();//select @var;//

图片


3.3 流程控制语句

    IF 条件判断
create or replace procedure proc5(in num int) begin     if num < 0 then         set @var = '负数';     elseif num = 0 then         set @var = '不是正数也不是负数';     else         set @var = '正数';     end if; end; //  call proc5(-1);// call proc5(0);// select @var;// call proc5(1);// select @var;//
    CASE 条件语句
create or replace procedure proc6(in num int) begin     case     when num < 0 then set @var = '负数';     when num = 0 then set @var = '不是正数也不是负数';     else set @var = '负数';     end case; end; // call proc61(-1);// select @var;// call proc61(0);// select @var;// call proc61(1);// select @var;//

图片


    WHILE 循环语句
create or replace procedure proc7() begin     while @var < 10 do         set @var = @var + 1;     end while; end; // set @var = 0;// call proc7();// select @var;//

图片


    REPEAT循环语句

create or replace procedure proc8() begin     repeat         set @var = @var + 1;     until @var >= 10     end repeat; end; // set @var = 1;// call proc8();// select @var;//

图片


    LOOP 循环语句
create or replace procedure proc9() begin     loop_sum: loop         set @var = @var + 1;         if @var < 10 then             iterate loop_sum;  -- 继续下一次循环迭代         end if;         leave loop_sum;  -- 退出循环     end loop loop_sum; end; // set @var = 0;// call proc9();// select @var;//

图片


3.4 存储过程中调用存储过程

create or replace procedure proc_outer() begin     call proc_inner(); end; //  create or replace procedure proc_inner() begin     set @var_inner = 'proc_inner'; end; // set @var_inner = NULL;// call proc_outer();// select @var_inner;//

图片


3.5 存储过程中使用PREPARE

create or replace procedure proc_prepare() begin     prepare proc_prepare_p1 from 'select * from tab_proc1 where id=?';     set @var_id = 1;     execute proc_prepare_p1 using @var_id;     set @var_id = 3;     execute proc_prepare_p1 using @var_id; end; // set @var_id = NULL;// call proc_prepare();// set @var_id = 5;// execute proc_prepare_p1 using @var_id;// deallocate prepare proc_prepare_p1;//

图片


三、存储过程管理

 存储过程的管理主要包括:显示过程、显示过程源码、删除过程。

  •   查看

--显示存储过程 mysql> SHOW CREATE PROCEDURE proc_prepare;  --显示指定数据库的存储过程 mysql> show procedure status where db ='mytest';  --显示特定模式的存储过程,要求显示名称中包含“proc2”的存储过程 mysql> show procedure status where name like'proc2%';

图片

  •   删除

--删除存过程 mysql> DROP PROCEDURE proc_prepare; Query OK, 0 rows affected (0.00 sec)

本次内容介绍至此,其他功能等待您来发现。谢谢!!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论