规范
  • 尽可能不使用单反引号(`),用于表名,字段名

  • 判断条件中必须是布尔型的,否则增加判断条件转换为布尔型

  • CONVERT函数的参数和mysql的相反,第一个参数是格式,第二个参数是值

      CONVERT(123, DECIMAL(12, 2))
      ==>
      CONVERT(DECIMAL(12, 2), 123)
  • CONVERT不支持方法

      CONVERT ( DATE_FORMAT( begin_time, '%k%i' ), SIGNED )
      ==>
      CAST ( DATE_FORMAT( begin_time, '%k%i' ) AS INTEGER )
  • 输出为map的Mapper中,用””包括别名

  • GROUP BY中不能使用SELECT中生成的别名(执行顺序:from > on > where > group by > having > select > order by)

  • group by中字段和select中的不是同一个表中的字段(statisticsOpenData),不全(LabMapper.selectSeatLab)

  • 不是group by列表,[SELECT列表中的非聚合列必须全部出现在GROUP BY子句中]

      feedbackList
      SELECT sf.* FROM sys_feedback sf INNER JOIN sys_feedback_area sfa ON sf.id = sfa.feedback_id 
      WHERE sf.is_del = 0 AND (sf.sys_no = 100 OR sf.sys_no = 0) 
      AND sf.gmt_create BETWEEN '2025-08-09' AND '2025-09-09' 
      GROUP BY sf.id ORDER BY sf.gmt_create DESC
  • group by 中不要使用select 中使用的别名

      selectTradeDetailsGroupPage
      select
          count(distinct if(rtd.trade_type = 1, rtd.order_id, null)) as trade_count,
          sum(if(rtd.trade_type = 1, rtd.trade_amount, 0)) as trade_amount,
          sum(if(rtd.trade_type = 2, 1, 0)) as refund_count,
          sum(if(rtd.trade_type = 2, rtd.trade_amount, 0)) as refund_amount,
          date_format(rtd.trade_time, '%Y-%m-%d') as stat_time
      group by
      stat_time
    
      -- 不能用stat_time,要使用rtd.trade_time
  • 不支持UNSIGNED/SIGNED

  • 自增长字段名大写处理(达蒙插入时无效列问题)

  • 修改字段名和属性,必须分开,不能用ALTER TABLE CHANGE,可以是哦那个ALTER TABLE ALTER COLUMN和ALTER TABLE MODIFY

      ALTER TABLE dev_rec change resv_rec_status resv_status varchar(30) int NULL DEFAULT 0;
      ==>
      ALTER TABLE dev_rec ALTER COLUMN resv_rec_status RENAME TO resv_status;
      ALTER TABLE dev_rec MODIFY resv_status int NULL DEFAULT 0;
  • 慎用保留字作为字段或者表名, 比如top(new表中)

  • mysql json操作符->替代

      wfd.form_data -> '$.processType' -- mysql
      JSON_VALUE(wfd.form_data, '$.processType') -- dm8
  • GROUP_CONCAT函数中ORDER BY替换

      -- mysql
      GROUP_CONCAT(DISTINCT IF(scene_id IS NULL, 0, scene_id) ORDER BY IF(scene_id IS NULL, 0, scene_id) ASC SEPARATOR ',')
      -- dm8
      LISTAGG(DISTINCT COALESCE(payment_method, 0), ',') WITHIN GROUP (ORDER BY COALESCE(payment_method, 0))
达蒙数据库操作
  • 显示所有表

      SELECT table_name FROM user_tables;
  • 删除所有表

      DECLARE
          table_name VARCHAR2(100);
      BEGIN
          FOR r IN (SELECT table_name FROM user_tables WHERE tablespace_name = 'UNIIC') LOOP
              EXECUTE IMMEDIATE 'DROP TABLE "' || r.table_name || '" CASCADE CONSTRAINTS';
          END LOOP;
      END;
达蒙SQL问题
  • Mybatis插入时,提示无效列名,自增长注解字段大小写问题
  • 不能使用alter table drop index方式删除索引,只能通过drop index
  • 不同通过create table时,内置创建索引,只能通过 create index
  • sql导出时,短字符串会导出CHAR(4 char),这种类型会导致插入’0’时,自动在后面添加空格填充,修改成VARCHAR(4 char)就可以了
Flyway问题
  • 数据库升级失败后,修改sql语句,删除flyway历史记录中的出错记录,重新运行程序
      delete  from "flyway_schema_history" where "version"='2.28'
  • 语句中包含占位符,导致错误(No value provided for placeholder: ${0})
      flyway.placeholder-replacement: false
IC中sql问题
  • GROUP BY中和SELECT中的不匹配
    LabMapper.getArea 少lab_kind
    RoomMapper.list 少 rm.open_num

Site中的问题

  • ID设置了自增属性,同事又直接对此赋值,dm需去掉自增属性

      -- site_building,site_campus,site_building_floor,sys_org_position
      ALTER TABLE site_campus DROP IDENTITY;
  • 新建楼层时,小区没有选择时,不能选择楼宇(楼宇列表为空),第二次进来时

  • 数据库对象定义中,字段名为大写(entity/po)

  • 修改关联模块支持dm, 数据库对象定义中,字段名为大写
    uni-chat
    workflow

  • 新建时,检查下拉列表对象是否齐全,不齐全显示入口,可以跳转进行新增

  • 前端编辑框提示问题,不是必须的id问题

文档更新时间: 2025-09-19 08:40   作者:方杰