昨天将oracle中的sql进行pg库的转化,碰到了系统表记录不同 的问题,记录一下。
Oracle USER_ARGUMENTS 记录当前用户能够访问的函数(存储过程)的一些参数信息(参数名称 参数类型 存储过程的名称 等等)。
pg_proc 这张表类似,但是记录的东西确很杂,记录数据的方式也不同。所以就有需要对pg_proc官方文档 表进行研究对比后 才好解决问题。
下面上实例:
Oracle:
oracle的数据是竖装的 多行 分开存储
PG:
pg的数据是单行 集中存储
对于oracle中一些字段转化成pg库的 几个比较常用的已经整理了,没有找到你需要的可以去查官方文档。
proname 函数名称
proargnames 参数名称
proallargtypes 参数类型 (尤为注意参数类型是 proallargtypes pg库中还有一个类似的字段,但这个才是类型)
proargmodes 参数方向
oracle 就比较明显
OBJECT_NAME 函数名称
ARGUMENT_NAME 参数名称
DATA_TYPE 参数类型
IN_OUT 参数方向
好了字段数据查询完了之后 就是对数据解析进行处理 由单行多数据 转换成多行数据。
想要知道几行数据 对参数名称这个字段的数量进行获取就行了,有几个参数名称 就会有几个参数类型,参数方向。
pg中存储的i o 转换成对应的 IN OUT
pg中的参数类型存储的是数字 对应的是 pg_type表中的oid
所以我们需要去pg_type表中查询出数字对应的参数类型
String osql = “select TYPNAME from pg_type where oid = ?”;
对于大括号的截取 利用转义字符就可以了。
today 2020-04-28