关于Oracle
最后更新于:2022-04-01 23:47:26
**Oracle自增长的处理:**
众所周知,Oracle没有自增概念,需要创建一个sequence,然后获得唯一ID。
Eova的处理:
**1.自动指定约定Sequence**
规则:seq_表名.nextval
```
public class EovaDbPro extends DbPro {
public EovaDbPro(String configName) {
super(configName);
}
@Override
public boolean save(String tableName, String primaryKey, Record record) {
// Oracle && 单主键 && 主键没值 -> 指定Sequence
if (xx.isOracle() && !primaryKey.contains(",") && record.get(primaryKey) == null) {
record.set(primaryKey, EovaConst.SEQ_ + tableName + ".nextval");
}
return super.save(tableName, primaryKey, record);
}
}
```
使用默认Seq举例:
Sql: insert into eova_log(id, user_id, type, info, ip) values(seq_eova_log.nextval, ?, ?, ?, ?)
**2.通过默认值自定义:**
**2.1 自定义Sequence**
如果不想让系统指定固定Sequence
想自定义或者共用Sequence
可以使用默认值自行指定.
自定义Seq举例:
create sequence seq_eova_user increment by 1 start with 21 maxvalue 9999999999;
PS:这里对名字没有约束,sequence 可以随意取名,例如:my_seq_id
自行创建任意名字的sequence,然后通过 eova_field.defaulter 指定
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/d51941fad10bd13e8e0facbee59d7284_922x292.png)
Sql: insert into eova_user(login_id, id, rid, nickname, login_pwd) values(?, seq_eova_user.nextval, ?, ?, ?)
**2.2 默认ID值**
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/279c71e3b650cf621d4564213047497c_915x280.png)
新增后:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/d857b419a6c9391b0ee899d5d9b96c41_578x159.png)
**2.3 生成全局唯一ID**
默认值填写 UUID即可
UUID规则:32位无去中划线全大写
```
UUID.randomUUID().toString().replaceAll("-", "").toUpperCase()
```
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9ac08bf6e0462cbf4ee48864be1fe5f5_295x313.png)
> 注意设置字段新增/更新状态=隐藏
**Other:**
Eova提供了由Mysql自动生成Oracle脚本的工具类:
DbUtil.createOracleSql();
使用方法:
连接到Mysql数据源上:
eova.config 配置:
initSql = true
系统启动时会将Sql脚本输出在控制台,复制执行即可!
';