您的位置:首页 > 数据库 > Oracle

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

2016-02-25 14:33 441 查看
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: