您现在的位置是:首页 >技术教程 >mysql,oracle使用区别网站首页技术教程

mysql,oracle使用区别

_我的天哪 2024-06-17 10:48:31
简介mysql,oracle使用区别

1.1concat,concat_ws,group_concat

        配置方式

                临时:SET SESSION group_concat_max_len = 10240;

                永久:配置文件my.ini增加group_concat_max_len=10240

                查看配置:show variables like 'group_concat_max_len';

 2.1oracle-start with

        mysql没有start with操作,需要自己封装函数

        参考

drop function if exists get_child_list_virtual_house;
create function get_child_list_virtual_house(in_id varchar(10)) returns TEXT
begin
     declare ids TEXT  default '';
     declare tempids TEXT;
     set tempids = in_id;
     while tempids is not null do
      set ids = CONCAT_WS(',', ids, tempids);
    select GROUP_CONCAT(id) into tempids from T_VIRTUAL_HOUSE where FIND_IN_SET(pid, tempids)>0;
    end while;
    return ids;
end;

注意:

1.mysql的函数不允许动态sql,因此无法使用入参作为表名,只能把表名称写死

2.返回值ids,中间量tempids的类型要尽可能的大一些,否则可能超长报错

SQL 错误 [1406] [22001]: Data truncation: Data too long for column 'tempids' at row 1

3.group_concat()存在长度限制,默认1024,如果不修改的话,可能导致结果数据缺失

设置方式 SET SESSION group_concat_max_len = 6000;

这种设置在mysql重启后失效,永久生效需要到配置文件增加配置

group_concat_max_len = 102400

查看当前设置的长度

show variables like 'group_concat_max_len';

结论:显然,我们应当尽量避免这样的操作,如果是mysql8以上的版本,可以使用WITH RECURSIVE来实现树形查询,当然也可以根据业务需求的其他字段曲线救国,比如通过树形关系存储表的fullname,fullpath这种类似的字段模糊搜索来实现查询所有子节点的操作

3.1模糊查询,查询语句中的拼接

mysql

like '%'#{keyName}'%'

oracle

like '%'||#{keyName}||'%'

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。