2023电力信息化系统关系数据库(开源部分)第2部分:迁移规范_第1页
2023电力信息化系统关系数据库(开源部分)第2部分:迁移规范_第2页
2023电力信息化系统关系数据库(开源部分)第2部分:迁移规范_第3页
2023电力信息化系统关系数据库(开源部分)第2部分:迁移规范_第4页
2023电力信息化系统关系数据库(开源部分)第2部分:迁移规范_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Q/GDWXXXXX—XXXX创建表,索引比较。CREATETABLECreatetable语句,两者在约束等条件下基本一致;其它方面略有差异。对照关系如下表:内容数据库例句标注基本建表Oraclecreatetablet_test(c_aint,c_bvarchar(255))基本相同,数据类型:SG-RDB-MS的INT相当于Oracle中的NUMBER(10,0)(详见后面数据类型章节)SG-RDB-MS缺省值约束Oraclecreatetablet_test(c_aintdefault0,c_bvarchar(255));SG-RDB-MS非空约束Oraclecreatetablet_test(c_aintnotnull,c_bvarchar(255))SG-RDB-MS唯一性约束Oraclecreatetablet_test(c_aintunique,c_bvarchar(255))或者createtablet_test(c_aint,c_bvarchar(255),unique(c_a))自动创建索引,Oracle不能在该约束字段上新建索引,而SG-RDB-MS没有此限制。SG-RDB-MS主键约束Oraclecreatetablet_test(c_aintprimarykey,c_bvarchar(255))或者createtablet_test(c_aint,c_bvarchar(255),constraintp_aprimarykey(c_a))自动创建索引,Oracle不能在该约束字段上再新建索引,而SG-RDB-MS没有此限制。SG-RDB-MS外键约束Oraclecreatetablet_f(c_aintprimarykey,c_bvarchar(255),foreignkey(c_a)referencest_test(c_a));SG-RDB-MS检查条件约束Oraclecreatetablet_test(c_aintcheck(c_a>0),c_bvarchar(255))或者createtablet_test(c_aint,c_bvarchar(255),check(c_a>0))SG-RDB-MS表空间指定Oraclecreatetablet_test(c_aint,c_bvarchar(255))tablespacet_data;SG-RDB-MScreatetablet_test(c_aint,c_bvarchar(255) )SG-RDB-MS无指定tablespace选项,默认innodb存储引擎CTAS建表Oraclecreatetablet_test_basselectc_ac_b,c_bc_dfromt_test;Oracle不允许增加新的字段的定义,只能通过别名方式,但是字段属性无法修改SG-RDB-MScreatetablet_test_b(n_aint,n_bvarchar(300))asselectc_ac_b,c_bc_dfromt_test;可以选择新的字段和字段属性表结构复制OracleSG-RDB-MScreatetablet_test_bliket_test;表结构(包括约束等)全部复制。但不复制表中数据。创建索引Oracle不支持,但在primarykey时支持usingindexSG-RDB-MScreatetablet_test(c_aint,c_bvarchar(255) ,indexi_test_c_a(c_a));支持可选建表同时创建索引创建按月分区Oraclecreatetable t_test(c_aint,c_bvarchar(255),sts_datedate)partitionbyrange(sts_date)(partitionP1301valueslessthan(TO_DATE('2013-01-0100:00:01','SYYYY-MM-DDHH24:MI:SS')),partitionP1302valueslessthan(TO_DATE('2013-02-0100:00:01','SYYYY-MM-DDHH24:MI:SS')),PARTITIONPMAXVALUESLESSTHAN(MAXVALUE))SG-RDB-MSCREATETABLE t_test(c_aINT,c_bVARCHAR(255),sts_dateDATETIME)PARTITION BY RANGE(TO_DAYS(sts_date))(PARTITIONP1301VALUESLESSTHAN(TO_DAYS('2013-01-01')),PARTITIONP1302VALUESLESSTHAN(TO_DAYS('2013-02-01')),PARTITIONPMAXVALUESLESSTHAN(MAXVALUE))分区字段是日期时,需要使用year(),to_days函数辅助分区建表。表注释Oraclecomment语法SG-RDB-MScreatetablet_test(c_aintprimarykey,c_bvarchar(255))comment'test'创建表时可添加注释。createindex相对简单,语句基本一致。功能数据库例句标注基本建索引Oraclecreateindexi_test_c_aont_test(c_a);SG-RDB-MS唯一性索引Oraclecreateuniqueindexi_test_c_aont_test(c_a);SG-RDB-MS分区索引Oraclecreateindexi_p_testont_test(c_a)globalpartitionbyrange(c_a)(partition p1 values lessthan(1000),partitionp2valueslessthan(2000),partitionp3valueslessthan(MAXVALUE));创建分区索引SG-RDB-MSALTERALTERTABLEALTERTABLE两者有较多的不一样,如下表功能数据库例句标注增加列Oraclealtertablet_testaddc_cint;关键字column可选:altertablet_testaddcolumnc_cint;SG-RDB-MS删除列Oraclealtertablet_testdropcolumnc_c;SG-RDB-MS重命名列Oraclealtertablet_testrenamecolumnc_ctoc_d;使用renamecolumn更改列名SG-RDB-MSaltertablet_testchangec_cc_dint;使用change更改列名修改列类型Oraclealtertablet_testmodifyc_ddate;使用modify更改列类型SG-RDB-MSaltertablet_testchangec_dc_ddate使用change更改列类型增加主键Oraclealtertablet_testaddconstraintpk_t_c_aprimarykey(c_a);SG-RDB-MSSG-RDB-MS还可以使用如下语句:altertablet_testchangec_ac_aprimarykey增加缺省值Oraclealter table t_test modifyc_adefault0;使用modify更改约束SG-RDB-MSaltertablet_testchangec_ac_aintdefault0使用change更改约束增加非空Oraclealtertablet_testmodifyc_anotnull;使用modify更改约束SG-RDB-MSaltertablet_testchangec_ac_aintnotnull;使用change更改约束重命名表Oraclerenamet_testtot_n;使用rename语句SG-RDB-MSaltertablet_testrenamet_n;新建索引Oracle无此语句SG-RDB-MSaltertablet_testaddindexidx_t_b(c_a);新建唯一索引Oracle无此语句SG-RDB-MSaltertablet_testadduniqueindexidx_t_b(c_a);新建主键Oracle无此语句SG-RDB-MSaltertablet_testaddconstraintp_t_bprimarykey(c_a);新建外键Oracle无此语句SG-RDB-MSaltertablet_faddconstraintp_t_fforeignkey(c_a)referencest_test(c_a);删除索引Oracle无此语句SG-RDB-MSaltertablet_fdropindex;删除主键Oracle无此语句SG-RDB-MSaltertablet_fdropprimarykey;删除外键Oracle无此语句SG-RDB-MSaltertablet_fdropforeignkeyp_t_f转换为分区表Oracle需要通过创建中间表的方式SG-RDB-MSaltertablet_fpartitionbyrange(c_a)(partitionP1valueslessthan(10),partitionP2valueslessthan(20));增加新的分区Oraclealtertablet_faddpartitionP3valueslessthan(30)注意增加分区的值必须大于已有分区的值。SG-RDB-MSalter table t_f add partition(partitionp3valueslessthan(30));注意增加分区的值必须大于已有分区的值。拆分的分区Oraclealtertablet_fsplitpartitionPMat(40) into(partition p4,partitionpm)使用splitpartiton拆分SG-RDB-MSaltertablet_freorganizepartitionPMinto(partitionp4valueslessthan(30),partitionpmvalueslessthan(MAXVALUE));使用reorganizepartiton拆分删除分区Oraclealtertablet_fdroppartitionp3;SG-RDB-MS字段注释Oracle无此语句SG-RDB-MSaltertablet_testmodifycolumnc_aintcomment'number';需要写出字段名和类型(可以参照建表语句)(1024字节)ALERTINDEXORACLE通过ALTERINDEX语句改变索引的定义。而SG-RDB-MS没有此语句,相同的功能使用ALTERTABLE语句操作(详见ALTERTABLE专题)。功能数据库例句标注重命名索引Oraclealterindexi_test_c_arenametoi_test_nSG-RDB-MS重建索引Oraclealter indexi_test_c_arebuild(online)SG-RDB-MS索引失效Oraclealterindexidx_t_aunusable;SG-RDB-MSDROPDROPTABLE内容数据库例句标注删除表Oracledroptablet_test;SG-RDB-MS删除表(判断表存在)OracleSG-RDB-MSdroptableifexitst_test;判断表是否存在,如果不存在,不会报错。删除被约束的表Oracledroptablet_testcascadeconstraints;SG-RDB-MS没有此操作,需要先删除约束,再删除表。DROPINEDX功能数据库例句标注删除索引Oracledropindexi_t_f;SG-RDB-MSdropindexi_t_font_test;TRUNCATE功能数据库例句标注清空表Oracletruncatetablet_test;SG-RDB-MSCOMMENT功能数据库例句标注注释表Oraclecommentontablet_testis'test'注释为空表示去掉注释SG-RDB-MS见createtable模块,注释为空表示去掉注释注释字段Oraclecommentoncolumnt_test.c_ais'number';注释为空表示去掉注释SG-RDB-MS见altertable模块,注释为空表示去掉注释RENAME功能数据库例句标注重命名表Oraclerenamet_testtot_nSG-RDB-MSrenametablet_testtot_n;需要关键字table重命名视图Oraclerenamet_viewtot_nSG-RDB-MSrenameviewt_viewtot_n;需要关键字tableDML(数据操作语言)主要包括SELECT,INSERT,UPDATE,DELETE语句。SELECTSelect包括了查询,子查询,连接,联合等方式。内容数据库例句标注基本语句Oracleselect*fromt_test;SG-RDB-MS查询加锁Oracleselect*fromt_testforupdate;建议最好不在并发的正式环境中使用此方式SG-RDB-MS表别名引用Oracleselect*fromt_test awherea.c_a=1;SG-RDB-MSselect*fromt_testawherea.c_a=1或者select*fromt_testasawherea.c_a=1支持可选择增加关键字as字段别名Oracleselectc_aa,c_bbfromt_test;selectc_aas"a",c_bas"b"fromt_test;SG-RDB-MSselectc_aa,c_bbfromt_test;selectc_aas"a",c_bas"b"fromt_test;select c_a 'a',c_b'b'fromt_test;支持对别名加单引号连接:内连接Oracleselecta.*fromt_testa,t_test1bwherea.c_a=b.c_a;selecta.*fromt_testainnerjoint_test1bona.c_a=b.c_a;一般使用第一种写法。SG-RDB-MS连接:外左连接Oracleselecta.c_a,a.c_b,b.c_a,b.c_bfromt_testa,t_test1bwherea.c_a=b.c_a(+);selecta.c_a,a.c_b,b.c_a,b.c_bfromt_testaleftjoint_test1bona.c_a=b.c_a;支持可选(+)SG-RDB-MSselecta.c_a,a.c_b,b.c_a,b.c_bfromt_testaleftjoint_test1bona.c_a=b.c_a;selecta.c_a,a.c_b,b.c_a,b.c_bfromt_testaleftjoint_test1busing(c_a);支持可选using语句连接:外左连接Oracleselecta.c_a,a.c_b,b.c_a,b.c_bfrom t_test a,t_test1bwherea.c_a(+)=b.c_a;select a.c_a,a.c_b,b.c_a,b.c_bfromt_testarightjoint_test1bona.c_a=b.c_a支持可选(+)SG-RDB-MSselecta.c_a,a.c_b,b.c_a,b.c_bfromt_testarightjoint_test1bona.c_a=b.c_a;selecta.c_a,a.c_b,b.c_a,b.c_bfromt_testaleftjoint_test1busing(c_a);支持可选using语句并集(联合)Oracleselect*fromt_testunionselect*fromt_test1select*fromt_testunionallselect*fromt_test1;SG-RDB-MS交集Oracleselecta.c_a,a.c_bfromt_testaintersectselectb.c_a,b.c_bfromt_test1b使intersect语法SG-RDB-MSselecta.c_a,a.c_bfromt_testainnerjoin t_test1busing(c_a,c_b)使用innerjoin代替差集Oracleselecta.c_a,a.c_bfromt_testaminusselectb.c_a,b.c_b fromt_test1b;使用minus语法SG-RDB-MSSELECTa.c_a,a.c_bfromt_testaleftjoint_test1busing(c_a,c_b)whereb.c_aisnull;使用leftjoin和where条件代替获取固定值Oracleselect1number,'string'stringfromdual;需要dual表构成完整的pl/sql语法SG-RDB-MSselect1number,'string'string;没有dual表。分组查询Oracleselectc_a,c_bfromt_testgroupbyc_a,c_b;严格按照查询字段列出分组条件。SG-RDB-MSselectc_a,c_bfromt_testgroupbyc_b;可以支持缺省查询字段。限制输出Oracleselect *fromt_testwhererownum<3;SG-RDB-MSselect*fromt_testlimit2;使用limit关键字限制输出(从第M行)OracleSG-RDB-MSselect*fromt_testlimit2,3;从第2行开始输出3行字符串截取Oracleselectsubstr(c_b,1,1)fromt_test;SG-RDB-MSselectsubstring(c_b,1,1)fromt_test;使用substring合并行Oracleselectwm_concat(c_a)fromt_test;以逗号分隔;SG-RDB-MSselectgroup_concat(c_a)fromt_test;以逗号分隔;all子查询Oracleselect*fromt_testwherec_a>all(selectc_afromt_test1);SG-RDB-MSany子查询Oracleselect*fromt_testwherec_a>=any(selectc_afromt_test1);SG-RDB-MSexist子查询Oracleselect*fromt_testwhereexists(select*fromt_test1 wherec_a=t_test.c_a);SG-RDB-MSnotexist子查询Oracleselect*fromt_testwherenotexists (select * from t_test1wherec_a=t_test.c_a);SG-RDB-MS正则表达式查找Oracleselect *fromt_testwhereregexp_like(c_a,'[14]');SG-RDB-MSselect*fromt_testwherec_aregexp'[14]';按字母大小查询Oracleselect*fromt_testwherec_alike'a%';对字母的大小写完全匹配SG-RDB-MSselect*fromt_testwherec_alikebinary'a%';增加关键字binary,完全匹配大小写INSERT内容数据库例句标注基本语句Oracleinsert intot_testvalues(101,'c101');SG-RDB-MS"into"可选子查询方式Oracleinsertintot_testselect4,'dd'fromdualunionselect5,'ee'fromdualunionselect6,'ff'fromdual;SG-RDB-MS"into"可选空值Oracleinsert intot_testvalues(100,null);SG-RDB-MS多行数据Oracle不支持SG-RDB-MSinsert intot_testvalues(4,'dd'),(5,'ee'),(6,'ff');采用逗号分隔,直接插入多行赋值set语句Oracle不支持SG-RDB-MSinsertintot_testsetc_a=1;其余字段按默认值处理引用已经赋值的字段Oracle不支持SG-RDB-MSinsert intot_test(c_a,c_b)values(1,concat('c',c_a));所引用的字段必须已经赋值过忽略错误Oracle不支持SmartSQLinsert ignore intot_testvalues(4,'ignore');不会插入数据,不会返回错误信息。UPDATE内容数据库例句标注基本语句Oracleupdatet_testsetc_a=11,c_b='c11'wherec_a=10;SG-RDB-MSselect子句Oracleupdatet_testaseta.c_b='test'wherea.c_a=(selectc_afromt_test1bwherea.c_a=b.c_a);SG-RDB-MScasewhen子句Oracleupdatet_testsetc_b=casec_awhen1then'test1'when2then'test2'else'testother'end;SG-RDB-MSlimit子句OracleSG-RDB-MSupdatet_testsetc_b='test'limit1;select子查询OracleSG-RDB-MSorderby子句OracleSG-RDB-MSupdatet_testsetc_b='test'orderbyc_a;按排序后多表同时更新OracleSG-RDB-MSupdatet_testa,t_test1bseta.c_b='1',b.c_b='2'wherea.c_a=b.c_a;不能添加orderby和limit子句innerjoin子句OracleSG-RDB-MSupdatet_testainnerjoint_test1bona.c_a=b.c_aseta.c_b=b.c_b;忽略错误Oracle不支持SG-RDB-MSupdateignoret_testaseta.c_a=4wherea.c_a=1;不会更新数据,不会返回错误信息。 DELETE内容数据库例句标注基本语句Oracledeletefromt_testwherec_a=1;SG-RDB-MSDCL(数据控制语言)主要包括GRANT,REVOKE语句。GRANT内容数据库例句标注基本语句Oraclegrantselectontpcc.itemtotest;SG-RDB-MS指定主机OracleSG-RDB-MSgrantselect ontpcc.itemtotest@'localhost';REVOKE内容数据库例句标注基本语句Oraclerevokeselectontpcc.itemfromtest;SG-RDB-MS指定主机OracleSG-RDB-MSrevokeselectontpcc.itemfromtest@'localhost';TCL(事务控制语言)主要包括SAVEPOINT,COMMIT,ROLLBACK,SETTRANSACTION语句。COMMIT内容数据库例句标注提交OraclecommitSG-RDB-MSROLLBACK内容数据库例句标注提交OraclerollbackSG-RDB-MS其它迁移要点关于数据库用户Oralce与SG-RDB-MS用户管理方式有较大区别,需要手工建立用户并给予合适的权限。关于触发器:语法差异较大,需要按照Oracle触发器手工添加。关于JobSG-RDB-MS使用Event实现,需要手工添加。关于序列:Oracle通常使用序列sequence配合触发器实现自增字段。SG-RDB-MS直接提供字段自增属性。需要把Oracle里面的自增字段直接改为SG-RDB-MS的字段属性,而且,这个字段必须是主键(key)并且不能有默认值。其他要点:在19位以下整数,需要转换成相应的整型(tinyint,smallint,mediumint,int,bigint)来节约存储空间。日期类型(DATE)需要指定为datetime。注释语句,POWERDESIGNER工具会自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论