1,自动连番Auto Numbers
※想定DB:Oracle ,SQL Server除外
1)Outsystems系统会在一个名叫[OSADMIN.OSSYS_ENTITY]的
系统内部表里,根据Studio里命名的内部DB表名自动起一个物理名
例: 内部DB表名:MYLISTENTITY
物理DB表名:OSUSR_xxx_MYLISTENTITY
※xxx:根据·eSpace不同单一的3字母
※MYLISTENTITY:内部DB表名的全部或者一部分
2)顺序 sequence
前缀:OSSEQ
例:CREATE SEQUENCE "OSADMIN"."OSSEQ_OSUSR_2NU_MYLISTENTITY" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 101 CAC
3)触发器? trigger
前缀:OSTRG
例:CREATE OR REPLACE EDITIONABLE TRIGGER "OSADMIN"."OSTRG_OSUSR_2NU_MYLISTENTITY" BEFORE INSERT ON "OSUSR_2NU_MYLISTENTITY" FOR EACH ROW BEGIN IF :NEW."ID" IS NULL THEN SELECT oshe_globals.setidentity("OSSEQ_OSUSR_2NU_MYLISTENTITY".nextval) INTO :NEW."ID" FROM dual; END IF; END;
2,DB兼容性问题 Compatibility Issues
1)Dual Table·的使用
2)getdate() Function的使用
SELECT getdate() FROM Dual
3)半角空字符
SELECT .* FROM WHERE .Username = '<single space>'
4)LOB型检索不区分大小写
5)文字数超过2000的等值条件,不用=,用Like
3,DB制约
Oracle 主KEY CONSTRAINT OSPRK_<internal name> PRIMARY KEY (<attribute>)
外KEY OSFRK
4,DB索引
Outsytems不推奖直接对数据库追加索引。
可在Service Studio里追加,生成的物理前缀名是 OSIDX
5,事务处理 Handling transactions
・CommitTransaction
・AbortTransaction
隔离级别 Isolation levels
Oracle:查询,插入,更新在同一个事务处理内进行,只有提交时才会更新DB。
6,数据模型变更的处理方法※很重要
变更不是立即反应,是在程序部署deploy时发生,并且以确保不会丢失数据的方式完成。
※如果在Service Studio里,对一个有数据的表用剪贴的方式生成一个新表,新表为空。
1)实体Entity或属性Attribute的删除
Outsystems只是把程序模型application model里的属性删掉,DB里还保留着,所以会有列多的警告信息出来。
2)实体Entity或属性Attribute的追加
没有重名的话会追加上,但过去曾经用过的话,Outsystems会做数据变换再利用处理
成功的话,部署deploy正常完了,反之报错公开失败。
3)实体Entity或属性Attribute的变更
改实体Entity名时,Outsystems只是改了DB的关联association名,物理名没变。
数据表的数据仍在。
改属性Attribute名时,Outsystems建立一个新名字的列名,旧列和数据仍在DB里,但在开发 环境里不再有效。
如果DB里已有同名的话,Outsystems尝试做映射map处理
4)属性Attribute的数据类型变更
如果已有数据,Outsystems尝试做变换处理,不能变换或则会丢数据的话,会报DB升版错误
5)Text属性Attribute的长度变更
Outsystems有两种类型保存文字列:
2000 文字以下(VARCHAR2(<length>),)可以往2000文字以上(CLOB)变更,
反之部署deploy时报错因为会丢数据。
6)DB error处理参考Link:
Database Integrity Suggestion Warning - OutSystems 11 Documentation