Oracle中存储过程迁移到Mysql(gbase)的问题集锦

转载:https://blog.csdn.net/qciwyy/article/details/50737254

1.关于字符串拼接问题?

例如Oracle中某段字符创拼接如下:

v_str := substr(v_resource_ids,
1,
instr(v_resource_ids, ‘,’ || resource_id || ‘,’)) ||
substr(v_resource_ids,
instr(v_resource_ids, ‘,’ || resource_id || ‘,’) +
length(’,’ || resource_id || ‘,’));

那么到Mysql中修改为如下就OK了;

set v_str = concat_ws(substr(v_resource_ids,
1,
instr(v_resource_ids, concat_ws(’,’ , resource_id , ‘,’))) ,
substr(v_resource_ids,
instr(v_resource_ids, concat_ws(’,’ , resource_id , ‘,’)) +
length(concat_ws(’,’ , resource_id , ‘,’))));

注释:

使用方法:
CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

使用方法:
CONCAT_WS(separator,str1,str2,…)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
注意:
如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

详细解释请参照博客:http://blog.163.com/yang_jianli/blog/static/16199000620110135214700/
2.关于显示记录的行数问题?

在Oracle中这样表示即可:

   SELECT nsrsbh
   from ctais_dj_nsrxx
   where rownum < 40
   order by nsrsbh asc;

在Mysql中如下表示即可:

   select nsrsbh
    from ctais_dj_nsrxx 
    where @num < 40
    order by nsrsbh asc;

3.关于返回值的问题?

在Oracle中如下表示

ret_str :=’’;
if fpmxdzstr is null then
ret_str:=’’;
return;
end if;
v_temp :=fpmxdzstr;

在Mysql中这样表示

lable:begin
set ret_str =’’;
if fpmxdzstr is null then
set ret_str =’’;
leave lable;
end if;
set v_temp :=fpmxdzstr;
end lable;

注释:

也可以给区块起别名,如:
lable:begin

end lable;
可以用leave lable;跳出区块,执行区块以后的代码

关于存储过程不错的博客:http://blog.csdn.net/lpz283929516/article/details/4386258

4.关于循环的问题?

例如在Oracle中循环用 while …loop…end loop

在Mysql中则用while…do…end while

注释:参考博客:http://blog.sina.com.cn/s/blog_4f925fc30100mw2l.html

5.关于Oracle中的序列的问题?

在oracle中有序列,但在mysql中没有序列,怎么办?

BEGIN
declare t_id varchar(100);

set t_id = substr((select max(id) from report_compare_list),8);

select t_id;
END
6.关于删除语句的表别名问题?

在oracle中删除一条语句的时候,我可以给表起别名,如下所示:

delete from ABC a where a.id=id;

在MySQL中删除一条语句的时候,不能给表起别名,否则会出错,语句如下:

delete from ABC where id=i.id;

如果想给表起别名也可以,如下书写

deletea from ABC a where a.id=id;

7.关于if…else…elsif…end if问题?

在Oracle中:if…else…elsif…end if

在MySQL中:if…else…elseif…end if

8.关于now(),sysdate问题?

在oracle中获取当前时间用sysdate

在mysql中获取当前时间用now()

你可能感兴趣的:(Oracle数据库,mysql)