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 值。
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中没有序列,怎么办?
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()