在管理规模较大的数据库时,我们往往需要面对大量的表与视图,与此同时在表与视图中可能会存在着许多的字段,让人难以迅速分辨,不利于对于数据库对象的管理。除了在命名时,对于有意义的表、视图及列,应尽量赋予具有意义、容易分辨的名称之外,对于数据库对象添加注释也是一个帮助我们管理数据库的有效办法。
在DM中添加注释可以用注释语句–“COMMENT ON IS ”。用户可以对于自己拥有的模式下的对象创建注释,可以针对整张表或视图做注释,也可以对于各列进行注释。例如对于已有的表添加注释,语法示例如下:
commentontableTEST.T1is'这是表注释';
对于视图进行注释,需要将语句中关键字table替换为view。而对于表中列添加注释,则需要将关键字table替换为column,再将添加表注释时的对象换为列名。例如在TEST模式下的T1表中ID列上添加注释,语法示例如下:
commentoncolumnTEST.T1.IDis'这是一个列注释';
利用DM管理工具,可以在创建表的时候就把注释一起添加上,示例如下:
通过添加注释,用户可以对于各个对象添加需要备注的信息,而对于注释的修改,实现方式和添加注释时一样。
commentontableTEST.T1is'这是又一个表注释';
通过相同方式对于同一个表进行注释操作,即可将该表的注释进行更新。对于注释更新之后,我们可以通过系统表SYSTABLECOMMENTS对于进行查询。
select*fromSYSTABLECOMMENTSwhereSCHNAME='TEST'andTVNAME='T1';
从查询结果看,TEST模式下的T1表的表注释已经被修改成功。SYSTABLECOMMENTS中包含有各模式下的表或视图的注释,SCHNAME为模式名,TVNAME为表或视图的名称,而TABLE_TYPE指定了对象类型为表或者视图,COMMENT$字段即为注释的具体内容。
若需要更新的注释内容中含有单引号,则需要将内容中单引号后面再添加一个单引号。例如,将T1表的注释修改为:这是一个’表’注释。
commentontableTEST.T1is'这是一个''表''注释';
select*fromSYSTABLECOMMENTSwhereSCHNAME='TEST'andTVNAME='T1';
对于表或视图中的字段注释进行查询可以参考系统表SYSCOLUMNCOMMENTS。
select*fromSYSCOLUMNCOMMENTS;
由于在当前数据库中只有一条列注释,在结果显示中即为TEST模式下T1表中ID列的注释。相比查询表注释的结果,多出的字段COLNAME表明了列名。
前面对于注释的更新操作,实际上是通过语句新建的注释覆盖掉了原有的注释信息。而同样为了删除掉列上的注释,可以将COMMENT语句的值赋给’’,从而达到删掉原注释信息的效果。在利用这种方式将注释去掉后,系统表SYSCOLUMNCOMMENTS中该列的记录并不会消失。示例如下:
commentoncolumnTEST.T1.IDis'';
select*fromSYSCOLUMNCOMMENTSwhereSCHNAME='TEST'andTVNAME='T1'and COLNAME='ID';
通过查询数据字典ALL_COL_COMMENTS同样可以查找到关于当前用户的环境下具有访问权限的对象中列的注释信息。
select*fromALL_COL_COMMENTSwhereOWNER='TEST';
在该查询结果中会包含可以访问的所有列的注释情况,其中包含OWNER即所有者用户,TABLE_NAME、SCHEMA_NAME、COLUMN_NAME分别对应标明、模式名与列名,而COMMENTS列即为注释信息。未添加过注释的列,其COMMENT值为空值“NULL”。对于表注释,相应的也可以通过查询ALL_COL_COMMENTS来查找。
select*fromALL_COL_COMMENTSwhereOWNER='TEST';
对于某些特定场景下需要将注释重建,则可以通过SQL语句将原注释内容以语句形式保存下来便于以后能批量执行进行添加。对于前面提到的注释内容含有单引号的记录,在以语句进行保存时需要将单引号的部分考虑在内,方便重建时语句的执行。
select'comment on table '||t.SCHNAME||'.'||t.TVNAME||' is '''||replace(t.COMMENT$,'''','''''')||''';'asCOMMENTS_BAKfromsystablecomments twheret.TABLE_TYPE='TABLE'andt.SCHNAMEnotin('SYS')unionselect'comment on view '||v.SCHNAME||'.'||v.TVNAME||' is '''||replace(v.COMMENT$,'''','''''')||''';'fromsystablecomments vwherev.TABLE_TYPE='VIEW'andv.SCHNAMEnotin('SYS')unionselect'comment on column '||c.SCHNAME||'.'||c.TVNAME||'.'||c.COLNAME||' is '''||replace(c.COMMENT$,'''','''''')||''';'fromsyscolumncomments cwherec.SCHNAMEnotin('SYS');
这样可以将需要保存的注释以SQL语句留存下来,在需要重建时直接执行即可。
以上就是对于DM中有关注释各方面的一点分享。灵活充分的运用注释,可以在面对大量的庞杂的对象结构时更好的对于数据库进行管理。