精华内容
下载资源
问答
  • MySQL 存储过程 if语句

    2020-04-09 19:08:13
    MySQL IF语句语法 下面说明了IF语句的语法: IF expression THEN statements; END IF; ...如果表达式(expression)计算...以下流程图演示了IF语句的执行过程: MySQL IF ELSE语句 如果表达式计算结果为FALSE时...

    MySQL IF语句语法

    下面说明了IF语句的语法:

    IF expression THEN 
       statements;
    END IF;

    如果表达式(expression)计算结果为TRUE,那么将执行statements语句,否则控制流将传递到END IF之后的下一个语句。

    以下流程图演示了IF语句的执行过程:

    MySQL IF ELSE语句

    如果表达式计算结果为FALSE时执行语句,请使用IF ELSE语句,如下所示:

    IF expression THEN
       statements;
    ELSE
       else-statements;
    END IF;

    以下流程图说明了IF ELSE语句的执行过程:

     

    MySQL IF ELSEIF ELSE语句

    如果要基于多个表达式有条件地执行语句,则使用IF ELSEIF ELSE语句如下: 

     

    复制代码

    IF expression THEN
       statements;
    ELSEIF elseif-expression THEN
       elseif-statements;
    ...
    ELSE
       else-statements;
    END IF;

    复制代码

    如果表达式(expression)求值为TRUE,则IF分支中的语句(statements)将执行;如果表达式求值为FALSE,则如果elseif_expression的计算结果为TRUE,MySQL将执行elseif-expression,否则执行ELSE分支中的else-statements语句。具体流程如下

    MySQL IF语句示例

    以下示例说明如何使用IF ESLEIF ELSE语句,GetCustomerLevel()存储过程接受客户编号和客户级别的两个参数。

    首先,它从customers表中获得信用额度

    然后,根据信用额度,它决定客户级别:PLATINUM , GOLD 和 SILVER 。

    参数p_customerlevel存储客户的级别,并由调用程序使用。

     

    复制代码

    USE yiibaidb;
    
    DELIMITER $$
    
    CREATE PROCEDURE GetCustomerLevel(
        in  p_customerNumber int(11), 
        out p_customerLevel  varchar(10))
    BEGIN
        DECLARE creditlim double;
    
        SELECT creditlimit INTO creditlim
        FROM customers
        WHERE customerNumber = p_customerNumber;
    
        IF creditlim > 50000 THEN
     SET p_customerLevel = 'PLATINUM';
        ELSEIF (creditlim <= 50000 AND creditlim >= 10000) THEN
            SET p_customerLevel = 'GOLD';
        ELSEIF creditlim < 10000 THEN
            SET p_customerLevel = 'SILVER';
        END IF;
    
    END$$

    复制代码

    以下流程图演示了确定客户级别的逻辑

     

     

    展开全文
  • 主要介绍了mysql存储过程if语句用法,结合实例形式详细分析了mysql存储过程if语句相关原理、使用技巧与操作注意事项,需要的朋友可以参考下
  • oracle存储过程if语句

    万次阅读 2019-07-10 09:18:43
    这个存储过程内容可能有点多,这是我平时的项目用到的存储过程,刚好里面用到了if语句,所以我就拿来了给大家看一下 create or replace procedure p_censor_stat_status_org_real(r_codes out varchar2, ...

    1.完整的存储过程如下:

    这个存储过程内容可能有点多,这是我平时的项目用到的存储过程,刚好里面用到了if语句,所以我就拿来了给大家看一下

    create or replace procedure p_censor_stat_status_org_real(r_codes       out varchar2,
                                                              r_msg         out varchar2,
                                                              r_data        out varchar2,
                                                              r_cur_data    out sys_refcursor,
                                                              info007_start in varchar2,
                                                              info007_end   in varchar2,
                                                              info008_start in varchar2,
                                                              info008_end   in varchar2,
                                                              p_info010     in varchar2,
                                                              p_info012     in varchar2,
                                                              p_info011     in varchar2,
                                                              p_info013     in varchar2,
                                                              p_info003     in varchar2,
                                                              p_info004     in varchar2,
                                                              p_info101     in varchar2) is
    
      --统计年度督办状态信息个数(单位)
    
      m_uuid         varchar2(32); -- 唯一id
      m_time         varchar2(30); -- 执行时间
      m_info101      varchar2(30); -- 执行时间
      m_info101_word varchar2(30); -- 执行时间
    
    begin
      r_codes := 'success';
      r_msg   := null;
      r_data  := null;
      --生成唯一id信息
      select sys_guid() into m_uuid from dual;
      dbms_output.put_line(m_uuid);
    
      -- 记录插入时间
      select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss')
        into m_time
        from dual;
    
      if p_info101 = '0' then
        m_info101_word := '推进中';
      elsif p_info101 = '1' then
        m_info101_word := '已销号';
      elsif p_info101 = '2' then
        m_info101_word := '已取消';
      
      end if;
    
      begin
      
        if p_info101 is not null then
          m_info101 := p_info101;
          insert into t_tmp_censor_stat_status_org
            (id, uuid, count, value, name, updatetime, indexs)
            (select sys_guid(),
                    m_uuid,
                    nvl(count(*), 0),
                    '0',
                    m_info101_word,
                    m_time,
                    1
               from t_censor_flow_inst_major t
              where (t.del_flag = '0' or t.del_flag is null)
                and t.info101 = m_info101
                and (info007_start is null or t.info007 > info007_start)
                and (info007_end is null or t.info007 < info007_end)
                and (info008_start is null or t.info008 > info008_start)
                and (info008_end is null or t.info008 > info008_end)
                and (p_info010 is null or instr(t.info010, p_info010) > 0)
                and (p_info011 is null or instr(t.info011, p_info011) > 0)
                and (p_info012 is null or instr(t.info012, p_info012) > 0)
                and (p_info013 is null or instr(t.info013, p_info013) > 0)
                and (p_info003 is null or instr(t.info003, p_info003) > 0)
                and (p_info004 is null or t.info004 = p_info004));
        
        else
          -- 正常办理:当前正在推进中的,没有出现过延期/取消
          insert into t_tmp_censor_stat_status_org
            (id, uuid, count, value, name, updatetime, indexs)
            (select sys_guid(),
                    m_uuid,
                    nvl(count(*), 0),
                    '0',
                    '正常办理',
                    m_time,
                    1
               from t_censor_flow_inst_major t
              where (t.del_flag = '0' or t.del_flag is null)
                and t.info102 = '0'
                and t.info101 = '0'
                and (info007_start is null or t.info007 > info007_start)
                and (info007_end is null or t.info007 < info007_end)
                and (info008_start is null or t.info008 > info008_start)
                and (info008_end is null or t.info008 > info008_end)
                and (p_info010 is null or instr(t.info010, p_info010) > 0)
                and (p_info011 is null or instr(t.info011, p_info011) > 0)
                and (p_info012 is null or instr(t.info012, p_info012) > 0)
                and (p_info013 is null or instr(t.info013, p_info013) > 0)
                and (p_info003 is null or instr(t.info003, p_info003) > 0)
                and (p_info004 is null or t.info004 = p_info004));
        
          -- 延期办理:出现延期
          insert into t_tmp_censor_stat_status_org
            (id, uuid, count, value, name, updatetime, indexs)
            (select sys_guid(),
                    m_uuid,
                    nvl(count(*), 0),
                    '1',
                    '延期办理',
                    m_time,
                    3
               from t_censor_flow_inst_major t
              where (t.del_flag = '0' or t.del_flag is null)
                and t.info102 = '1'
                and (info007_start is null or t.info007 > info007_start)
                and (info007_end is null or t.info007 < info007_end)
                and (info008_start is null or t.info008 > info008_start)
                and (info008_end is null or t.info008 > info008_end)
                and (p_info010 is null or instr(t.info010, p_info010) > 0)
                and (p_info011 is null or instr(t.info011, p_info011) > 0)
                and (p_info012 is null or instr(t.info012, p_info012) > 0)
                and (p_info013 is null or instr(t.info013, p_info013) > 0)
                and (p_info003 is null or instr(t.info003, p_info003) > 0)
                and (p_info004 is null or t.info004 = p_info004));
        
          -- 办理销号:当前状态是办理销号的
          insert into t_tmp_censor_stat_status_org
            (id, uuid, count, value, name, updatetime, indexs)
            (select sys_guid(),
                    m_uuid,
                    nvl(count(*), 0),
                    '3',
                    '办结销号',
                    m_time,
                    2
               from t_censor_flow_inst_major t
              where (t.del_flag = '0' or t.del_flag is null)
                and t.info101 = '1'
                and (info007_start is null or t.info007 > info007_start)
                and (info007_end is null or t.info007 < info007_end)
                and (info008_start is null or t.info008 > info008_start)
                and (info008_end is null or t.info008 > info008_end)
                and (p_info010 is null or instr(t.info010, p_info010) > 0)
                and (p_info011 is null or instr(t.info011, p_info011) > 0)
                and (p_info012 is null or instr(t.info012, p_info012) > 0)
                and (p_info013 is null or instr(t.info013, p_info013) > 0)
                and (p_info003 is null or instr(t.info003, p_info003) > 0)
                and (p_info004 is null or t.info004 = p_info004));
        
          -- 已取消:当前状态是已取消的
          insert into t_tmp_censor_stat_status_org
            (id, uuid, count, value, name, updatetime, indexs)
            (select sys_guid(),
                    m_uuid,
                    nvl(count(*), 0),
                    '4',
                    '已取消',
                    m_time,
                    4
               from t_censor_flow_inst_major t
              where (t.del_flag = '0' or t.del_flag is null)
                and t.info101 = '2'
                and (info007_start is null or t.info007 > info007_start)
                and (info007_end is null or t.info007 < info007_end)
                and (info008_start is null or t.info008 > info008_start)
                and (info008_end is null or t.info008 > info008_end)
                and (p_info010 is null or instr(t.info010, p_info010) > 0)
                and (p_info011 is null or instr(t.info011, p_info011) > 0)
                and (p_info012 is null or instr(t.info012, p_info012) > 0)
                and (p_info013 is null or instr(t.info013, p_info013) > 0)
                and (p_info003 is null or instr(t.info003, p_info003) > 0)
                and (p_info004 is null or t.info004 = p_info004));
        end if;
      
      end;
      begin
        open r_cur_data for
          select t.name, t.count
            from t_tmp_censor_stat_status_org t
           where t.uuid = m_uuid
           order by t.indexs;
      end;
      /*清除临时表数据*/
      delete t_tmp_censor_stat_status_org t where t.uuid = m_uuid;
      commit;
    
    end p_censor_stat_status_org_real;
    

    2.需要注意的地方

    在写的时候,如果有多种情况,一定不要使用else if,因为这种用法在oracle存储过程中是错误的,应该使用elsif,第一次使用的时候我就用错了,所以怎么调都会报错,最后才发现是这里出了问题。所以正确的用法是下面这样的:

      if p_info101 = '0' then
        m_info101_word := '推进中';
      elsif p_info101 = '1' then
        m_info101_word := '已销号';
      elsif p_info101 = '2' then
        m_info101_word := '已取消';
      
      end if;
    

    还有一点,存储过程中的判断是否相等使用=,给变量赋值的时候使用:=

    3.结语

    好了,这边文章就到这里了,上边所写的东西都是我平时测试好的,大家有什么其他疑问的话可以在评论里提出来,大家一起探讨,一起进步。

    展开全文
  • ORACLE存储过程的分支语法(IF语句

    万次阅读 2018-05-31 11:12:14
    基本语法1.if 条件 then 语句1; 语句2; end if;2.if 条件 then 语句序列1; esle 语句序列; end if;3. if 条件 then 语句;elsif 语句 then 语句; else 语句; end if;...

    基本语法

    1.    if 条件 then 语句1;

           语句2;

           end if;

     

    2.    if  条件 then 语句序列1;

           esle 语句序列;

           end if;

     

    3.    if 条件 then 语句;

           elsif 语句 then 语句;

           else 语句;

           end if;

     

    例:

    declare
    var number;
    psal test_procedure.money%type;
    begin
    
      select t.money 
      into psal 
      from test_procedure t 
      where t.name = 'XX天';
    
      if psal>1000 
        then var:=10;
      elsif psal>1999 
        then var:=20;
      else var:=20;
    
      end if;
    
    dbms_output.put_line(var);
    
    end;

    唯一注意的一点就是elsif的写法!! 看清

    楚!!

     

    展开全文
  • mysql存储过程if语句了解下

    万次阅读 2018-07-09 13:41:13
    mysql中的 IF语句允许我们根据表达式的某个条件或值结果来执行一组SQL语句,所以我们要在MySQL中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合。表达式可以返回TRUE,FALSE或NULL,这三个值之一。来看...

    mysql中的 IF语句允许我们根据表达式的某个条件或值结果来执行一组SQL语句,所以我们要在MySQL中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合。表达式可以返回TRUE,FALSENULL,这三个值之一。来看下语法结构:

    IF expression THEN 
       statements;
    END IF;
    

    如果上述表达式(expression)计算结果为TRUE,那么将执行statements语句,否则控制流将传递到END IF之后的下一个语句。咱们来看下IF语句的执行过程:

    咱们再来看下IF ELSE语句的语法结构:

    IF expression THEN
       statements;
    ELSE
       else-statements;
    END IF;
    

    完事就来看IF ELSE语句的执行过程:

    我们如果要基于多个表达式有条件地执行语句,则使用IF ELSEIF ELSE语句,它的语法结构如下:

    IF expression THEN
       statements;
    ELSEIF elseif-expression THEN
       elseif-statements;
    ...
    ELSE
       else-statements;
    END IF;
    

    如果表达式(expression)求值为TRUE,则IF分支中的语句(statements)将执行;如果表达式求值为FALSE,并且elseif_expression的计算结果为TRUE,mysql将执行elseif-expression,否则执行ELSE分支中的else-statements语句。咱们来看下具体的执行过程:

    咱们接下来使用IF ESLEIF ELSE语句和GetCustomerLevel()存储过程接受客户编号和客户级别的两个参数。首先这个GetCustomerLevel()存储过程得先从customers表中获得信用额度,完事呢,根据信用额度,它决定客户级别:PLATINUM , GOLDSILVER 。参数p_customerlevel存储客户的级别,并由调用程序使用,咱们来看下具体的sql:

    
    DELIMITER $$
    
    CREATE PROCEDURE GetCustomerLevel(
        in  p_customerNumber int(11), 
        out p_customerLevel  varchar(10))
    BEGIN
        DECLARE creditlim double;
    
        SELECT creditlimit INTO creditlim
        FROM customers
        WHERE customerNumber = p_customerNumber;
    
        IF creditlim > 50000 THEN
     SET p_customerLevel = 'PLATINUM';
        ELSEIF (creditlim <= 50000 AND creditlim >= 10000) THEN
            SET p_customerLevel = 'GOLD';
        ELSEIF creditlim < 10000 THEN
            SET p_customerLevel = 'SILVER';
        END IF;
    
    END$$

    确定客户级别的逻辑的流程图如下:

    好啦,本次分享就到这里了。

    如果感觉不错的话,请多多点赞支持哦。。。

    展开全文
  • mysql 存储过程if语句

    千次阅读 2016-12-31 18:48:03
    if statement then (过程化的语句) elseif statement then (过程化的语句) //elseif 中间没有空格 else (过程化的语句) end if; IF sta=-1 THEN  sql语句(一系列);  ELSEIF sta=-2 THEN ...
  • 存储过程中,if语句使用

    万次阅读 2015-11-10 13:37:47
    if语句:判断用户输入的数字set serveroutput on/* 1.提示信息 2. 接收键盘输入 num 是一个地址值SQL优化: num绑定变量(尽量使用绑定变量) select * from emp where deptno=10; –> 执行计划 select * from ...
  • --创建一个存储过程 create proc multi @num1 int, @num2 int=10 output --output的功能类似于C#中的out修饰参数 as set @num2=@num2*@num1 if @num2 > 40 --如果num2 > 0,则输出,否则,不输出 print @num...
  • MySQL存储过程详解 mysql 存储过程,if,while常用语句

    万次阅读 多人点赞 2014-03-03 20:38:01
    mysql存储过程详解 1. 存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored ...一个存储过程是一个可编程的函数,它在数据库中创建并保存。它
  • (一)MySQL存储过程IF语句语法 IF expression THEN statements; END IF; 使用实例:从customers表中获得客户的信用额度。 参数:p_customerlevel用来存储客户的级别,并由调用程序使用。 DELIMITER $$ ...
  • Oracle 创建函数与存储过程语句积累

    千次阅读 2013-08-11 22:26:58
    创建一个返回字符串的函数 create or replace function get_hello_msg return varchar2 as begin return 'hello world'; end get_hello_msg; 查看函数的类型和状态 select object_name, object_type, status ...
  • oracle支持在函数或存储过程之外使用if else for等任何语句,而mysql执行if else for等语句只能在函数或存储过程中才行!
  • drop procedure if exists p_hello_world; create procedure p_hello_world(in v_id int) begin if (v_id > 0) then select '> 0'; elseif (v_id = 0) then select '= 0'; else
  • Oracle之创建存储过程SQL语句

    千次阅读 2020-05-19 17:23:26
    1、创建存储过程。 create or replace procedure myprocedure(sid in number) as exam number; begin select * from score where sid=score.userid; dbms_output.put_line(exam); if exam>60 then dbms_o
  • Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三...
  • SQL语句存储过程实例详解(面试宝典)

    万次阅读 2016-03-16 17:57:06
    本文用3个题目,从建立数据库到创建存储过程,详细讲解数据库的功能。这个问题面试的时候也是经常会用到的,比如写sql语句。 题目1 学校图书馆借书信息管理系统建立三个表: 学生信息表:student ...
  • Oracle存储过程if 条件判断语句

    千次阅读 2011-08-12 15:30:36
    create or replace procedure Test1(score in number) ... if(score&gt;90) then begin dbms_output.put_line('the result is A'); end; elsif(score&gt;80) then begin dbms_output.put_lin...
  • 创建存储过程语句 create proc myOrderInfo_1 ( @s_OrderId int , @s_totalPrice float, @s_OrderDate date, @s_payMode varchar(50) ) as begin set nocount on; DECLARE @MyParm NVARCHAR(MAX) , @...
  • DB2存储过程——条件判断语句if then

    千次阅读 2018-05-17 15:27:00
    存储过程中的if then 语法 IF A > B THEN ...ELSEIF A = B THEN ...ELSE ...END IF 举例来说 if upper(v_lx) = 'V' then if exists(select 1 from syscat.views where viewschema='PAS' and viewname=.....
  • MySQL创建、调用存储过程

    万次阅读 2019-03-18 15:47:13
    一、创建存储过程 ...首先,我们了解一下存储过程创建语句: CREATE PROCEDURE `index_statistic`(IN `flag` varchar(10),OUT `result` int,INOUT `num` int) BEGIN IF flag is not null THEN #查询语...
  • SqlServer 存储过程 if else 两层判断 语句拼接
  • 1.问题的由来前几天写项目的时候,有用到存储过程,需要在存储过程创建一张临时表,然和在动态增减临时表的字段,所以就用到了mysql的prepare预编译语句。2.这个语法是干嘛的基本语法:PREPARE stmt from '你的sql...
  • oracle存储过程里的ifelse语句这样写,想想也是醉了 if dwxh = 1 then num1 := num_sum; elsif dwxh = 2 then num2 := num_sum; elsif dwxh = 3 then num3 := num_sum; elsif dw
  • 存储过程中,goto语句if else语句注意,标签的位置问题导致条件语句失效如if(@a ) goto tag1if(@b > 3) begin...... endelse--tag1: ---标签放这里,则else内的语句始终会执行,无论@b是否小于3 begintag1: --标签正确...
  • ORACLE存储过程

    万次阅读 多人点赞 2018-11-02 18:14:48
    oracle存储过程 目录 一.什么是存储过程 二.为什么要写存储过程 三.存储过程基础 1.存储过程结构 2.存储过程语法 3.pl/sql处理存储过程 四.存储过程进阶 1.BUIK COLLECT 2.FORALL 3.pl/sql调试存储过程 ...
  • 在mysql中,我们可以使用SIGNAL和RESIGNAL语句来引发存储过程中的错误条件。先来看,SIGNAL语句。我们通常使用SIGNAL语句存储的程序(例如存储过程存储函数,触发器或事件)中向调用者返回错误或警告条件。 SIGNAL...
  • mysql复合语句存储过程、游标

    千次阅读 2016-08-14 11:42:54
    复合语句的使用:声明变量、分支语句if-else-then、case when)、循环语句(while、loop、repeat)、异常处理;游标的使用;存储过程(带参数、不带参数)。
  • if语句做为表达式使用,语法格式如下: IF(expr1,expr2,expr3) 说明: 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值...
  • 如果我们输入并运行以下代码:   begin if 'U001' in (select userId from userInfo) then dbms_output.put_line('用户...可以知道,PL/SQL中,if语句是不能有子查询的,PL/SQL的语法有限制。IF 后面只能是逻辑

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 507,813
精华内容 203,125
关键字:

如何创建if语句的存储过程