怎样突破表名30个字符的限制(r2笔记51天)
发布日期:2021-06-30 13:29:08 浏览次数:2 分类:技术文章

本文共 1991 字,大约阅读时间需要 6 分钟。

根据oracle的规范,对象的长度最大为30位,也就是说,在平时的使用中如果碰到表名长度大于30位,首先oracle是不答应的,它会提示idnetifier too long的错误。而30位的长度总是感觉受到限制,现在在做数据迁移的时候就碰到的类似的问题。当然了,我不是想强行创建一个大于30位的表名,本来可读性就差些,办法总比困难多。想想别的招。举个例子。有一个表customer_details,表名长度是16位。SQL> SELECT LENGTH('CUSTOMER_DETAILS') FROM DUAL;LENGTH('CUSTOMER_DETAILS')-------------------------- 16如果表里的数据特别多,现在想把这个表分成1000个子表,子表的命名规则如下CUSTOMER_DETAILS_EXT_1000那样的话,子表的表名最大长度就是25位。SQL> SELECT LENGTH('CUSTOMER_DETAILS_EXT_1000') FROM DUAL;LENGTH('CUSTOMER_DETAILS_EXT_1000')----------------------------------- 25在很多情况下,表名长度可能就达到了25位甚至更多,接近30位,那样的话再加后缀EXT_XXX表名就肯定不够了。现在想能不能给表名做一个很好的映射,能够根据这个别名和真正的表明得到 重新命名后的表名。换句话就是假设起的表的别名为TEST,能够根据TEST 和表名 CUSTOMER_DETAILS 得到子表名CUSTOMER_DETAILS_EXT_1000考虑了一下几种情况,感觉都有些牵强,不够通用。比如从表的末尾开始扣减字符,类似CUSTOMER_DETA_EXT_1000这样的形式。 但是如果表名很类似,只有最后一位不相同,那么这种命名规则就不适用了。或者说从表名开始扣减字符,类似TOMER_DETAILS_EXT_1000这样的形式。如果表名就前几位不同,那么这种命名规则也就不适用了。如果根据加密算法,这样又有些小题大做了。而且对于加密的算法,自己也得花不少的功夫。如果考虑把表名反转, 类似SLIATED_REMOTSUC_EXT_1000这样好像有点意思,但也是有点牵强。效果和去前几位后几位都是类似的。最后想对于表的唯一性,又想通用,又想有可读性,最后采用object_id,让数据库生成的id来做为表的别名。比如表CUSTOMER_DETAILS的Object_id为12389, 那么表名就是12389_EXT_1000,这样就能省下不少的空间做为子表的命名空间,如果要查找对应的父表,只需要根据objec_id即可。在数据库中Object_id一般也不会超过10位,我想一个库里不会有10亿个Object吧。这样后面的子表命名就有了将近20位的空间。来简单测试一下:CREATE TABLE 12389_EXT_1000 AS SELECT *from cat where rownum<2 *ERROR at line 1:ORA-00903: invalid table name表名不能以数字开头。来加一个前缀。SQL> create table t_12389_ext_1000 as select*from cat where rownum<2;Table created.还有有的朋友可能会说,为什么不用data_object_id,那个代表最新的object_id。因为我们需要不变的id。比如下面的场景中,data_object_id就可能和Object_Id不一致。SQL> select object_id,data_object_id,object_name from dba_objects where owner='SYS' and object_name='T'; OBJECT_ID DATA_OBJECT_ID OBJECT_NAME---------- -------------- ------------------------------ 18040 18040 TSQL> TRUNCATE TABLE T;Table truncated.SQL> select object_id,data_object_id,object_name from dba_objects where owner='SYS' and object_name='T'; OBJECT_ID DATA_OBJECT_ID OBJECT_NAME---------- -------------- ------------------------------ 18040 18041 T

转载地址:https://jeanron100.blog.csdn.net/article/details/102506874 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:海量数据迁移之分区并行抽取(r2笔记53天)
下一篇:海量数据迁移之外部表切分(r2笔记52天)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月15日 21时26分08秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章