ORACLE 迁移到 MogDB 之存储过程改造:系统视图(2)-查询分区表的分区名称
上文 (https://hi.mogdb.org/posts/83bfca47/)讲到了系统视图的 user_tab_partitions
,不过他就是查询count 判断分区是否存在,具体改造如下:
1 | select count(*) from user_tab_partitions where partition_name = 'xxx_partition' |
其实在日常改造过程当中,虽然 pg 是以扩展来号称期方便的特性,其实没必要,国产化改造过程中,要尽可能的简单,满足业务需求,对于上面遇到的,虽然是查询 user_tab_partitions
视图,但是他主要是查询分区表是否存在,MogDB的 pg_partition
就可以满足要求。
1 | select count(*) from pg_partition p where parttype=‘p’ and p.relname = 'xxx_partition‘ |
但是这次遇到的是查询 分区表的分区名称。pg 或者 MogDB 通过一个系统视图是无法替换的,他是查询某个表的分区名称。对于 oracle 来说通过 user_tab_partitions 很简单的就可以获取,但是 pg 或者 MogDB 需要两个表进行关联。
源SQL 如下:
1 | select partition_name from user_tab_partitions where table_name='v_tablename' |
但是 MogDB 需要俩表进行关联如下,而要把这个写到存储过程中,比较繁琐。
1 | select |
就在当前 schema
下 创建 user_tab_partitions
的视图
由于目前 ORACLE 的系统视图是轻度使用,不打算使用 compat-tools
,如果日常或者应用重度依赖 ORACLE 的系统视图,建议安装 compat-tools
插件。
创建 user_tab_partitions
的视图,注意这个视图跟 ORACLE 的原视图不等价,但是可以满足本次业务
1 | create view user_tab_partitions as |
1 | MogDB=> create view user_tab_partitions as |
1 | MogDB=> select partition_name,table_name from user_tab_partitions where table_name='t_part_noindex'; |
原文作者: Hi.MogDB
原文链接: https://hi.mogdb.org/posts/5c604ee4/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议