mysql 、oracle存储过程语法区别

时间:2021-05-14 14:53:59

mysql 、oracle存储过程语法区别

 

1、  条件语句:mysql使用elseif关键字,oracle是elsif关键字;

oracle:

if表达式 then 

表达式;

elsif

表达式;

       endif;

mysql:

if表达式then 

表达式;

elseif

表达式;

              endif;

2、 字符串连接

       oracle使用 || ;

       mysql 使用concat函数;

 

3、 日期计算(年月日数)

mysql:

函数TimeStampDiff()是MySQL本身提供的可以计算两个时间间隔的函数,语法为:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2),其中unit单位有如下几种,分别是:SECOND, MINUTE, HOUR, DAY,WEEK, MONTH, QUARTER, or YEAR。

当前时间:sysdate() 
字符转日期:str_to_date() 分隔符一致,年月日要一致;示例:

select str_to_date('2008-4-2 15:3:28','%Y-%m-%d%H:%i:%s');

日期转字符:DATE_FORMAT(date,format) 
SELECT DATE_FORMAT(sysdate(), '%Y-%m-%d %H:%i:%s');
数字转字符:concat(num,’’)

oracle:

       months_between 求日期间隔月份,除以12即为间隔年份;

       天数,只需要日期直接相减;

       当前时间:sysdate

       字符转日期:to_date()

日期转字符:to_char(date,format) to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
数字转字符:to_char(num)

 

4、 定义游标

       oracel:

       CURSOR curPlanIndex is

    SELECT a.INDEX_SCORE

          ,c.enum_value,c.dn_value,c.up_value,c.score,c.score_desc

    FROM eval_plan_index  a

         JOIN eval_index_score c onc.index_id=a.index_id and a.plan_id = c.plan_id

    WHERE a.plan_id = V_PLAN_ID and a.index_id= V_INDEX_ID

order by dn_value;

MYSQL:

declare  curPlanIndex cursor for

    SELECT a.INDEX_SCORE

          ,c.enum_value,c.dn_value,c.up_value,c.score,c.score_desc

    FROM eval_plan_index  a

         JOIN eval_index_score c onc.index_id=a.index_id and a.plan_id = c.plan_id

    WHERE a.plan_id = V_PLAN_ID and a.index_id= V_INDEX_ID

order by dn_value;

 

5、 selectinto 赋值

oracle 有exception错误处理

 begin

    select value_name into vc_num_unit fromsys_dict

      where dict_code = 'szdw' and value_code =v_num_unit  and rownum <=1 ;

 exception

    when no_data_found then

      vc_num_unit := '';

 end;

mysql 如果select 没有数据,则不执行into操作,变量值保持为上次结果,需要手工重置。最好能limit 1;只返回一条数据;