Oracle 使用type属性检索VARRAY元素类型
我想通过type属性或任何解决方法检索varray存储的元素类型 例如,我们的类型定义如下Oracle 使用type属性检索VARRAY元素类型,oracle,plsql,Oracle,Plsql,我想通过type属性或任何解决方法检索varray存储的元素类型 例如,我们的类型定义如下 CREATE TYPE "READINGS" AS VARRAY (200) OF NUMBER(21, 6); CONSUMPTION INTERVALS.READINGS.COLUMN_TYPE%TYPE; (读数为varray,元素类型为编号(21,6)) 读数是表间隔中的一列interval是一个中心表,我们在interval上有批处理,这些批处理执行sql存储过程。在存储过程中,我们有硬编
CREATE TYPE "READINGS" AS VARRAY (200) OF NUMBER(21, 6);
CONSUMPTION INTERVALS.READINGS.COLUMN_TYPE%TYPE;
(读数为varray,元素类型为编号(21,6)
)
读数
是表间隔
中的一列interval
是一个中心表,我们在interval
上有批处理,这些批处理执行sql存储过程。在存储过程中,我们有硬编码的变量声明映射到读取
VArray类型元素类型,即NUMBER(21,6)
,例如存储过程有如下变量声明
CONSUMPTION NUMBER(21, 6);
每当更改Varray定义或删除Varray并以不同的大小和精度重新创建时,number(21,6)
上的ex改为number(25,9)
我们需要更改所有批处理存储过程中的变量声明。
我所要找的就是做消费变量声明,参考VArray的元素类型。我想要这样的东西
CREATE TYPE "READINGS" AS VARRAY (200) OF NUMBER(21, 6);
CONSUMPTION INTERVALS.READINGS.COLUMN_TYPE%TYPE;
(我想要这样的东西,请参考varray存储的元素类型)为什么要首先创建一个带有
varray
列的表?一般来说,为读数创建一个单独的表,并使用外键将行关联回间隔
表会更有意义。然后,您就可以很容易地声明类型为的列。COLUMN\u NAME%type
集合在PL/SQL中非常有用。我从未见过他们改进标准化数据建模方法的案例。我见过很多情况,在这些情况下,将集合合并到数据模型中最终会使数据模型更难使用,代码更难编写和维护
如果不想修复数据模型,可以
- 声明一个
子类型
或类型为NUMBER(21,6)
的打包变量,将其用作变量声明的类型。如果更改VARRAY
类型的声明,则必须更改此定义
- 使用单个属性(a
NUMBER(21,6)
)创建对象类型,并基于该对象类型定义VARRAY
。然后可以在代码中声明对象类型的实例
这不是必需的解决方案,但您可以获取类型定义的字符串,以便在动态SQL中进一步使用它
SELECT
regexp_substr(text, 'VARRAY.*?OF\s+(.+?)(;|\s)*$', 1, 1, 'i', 1)
FROM user_source
WHERE name = 'READINGS'