oracle – 使用TYPE属性检索VARRAY元素类型

我想通过类型属性或任何解决方法检索元素类型的varray存储.

例如,我们的类型定义如下

CREATE TYPE "READINGS" AS VARRAY (200) OF NUMBER(21, 6);

(读数是varray,类型为数字(21,6))

READINGS是表INTERVALS中的一列. INTERVALS是一个中心表,我们在INTERVALS上有批处理程序,它们执行sql存储过程.在存储过程中,我们将硬编码变量声明映射到READING VArray类型元素类型,即NUMBER(21,6),例如存储过程具有变量声明,如

CONSUMPTION NUMBER(21, 6);

每当更改Varray定义或删除varray并以不同的大小和精度重新创建时,ex(而不是数字(21,6))更改为数字(25,9),我们需要在所有批处理存储过程中更改我们的变量声明.
我正在寻找的是制作CONSUMPTION变量声明,请参考VArray的元素类型.我想要这样的东西

CONSUMPTION INTERVALS.READINGS.COLUMN_TYPE%TYPE; 

(我想要这样的东西,参考varray存储的元素类型)

最佳答案 为什么要首先创建一个带有VARRAY列的表?通常使用外键创建一个单独的READING表更有意义,该外键允许您将行关联回INTERVALS表.然后,您可以轻松地声明READINGS.COLUMN_NAME%TYPE类型的列.

集合在PL / SQL中非常有用.我从未见过他们在标准规范化数据建模方法上有所改进的情况.我已经看到多种情况,将集合合并到您的数据模型中最终会使您的数据模型更难以使用,并且您的代码更难编写和维护.

如果您不想修复数据模型,则可以

>声明一个SUBTYPE或NUMBER(21,6)类型的打包变量,用作变量声明的类型.如果更改VARRAY类型的声明,则必须更改此定义.
>使用单个属性(NUMBER(21,6))创建对象类型,并根据该对象类型定义VARRAY.然后,您可以在代码中声明对象类型的实例.

点赞