我想通过type属性或任何变通方法来检索varray存储的元素的类型。
例如,我们的类型定义如下
CREATE TYPE "READINGS" AS VARRAY (200) OF NUMBER(21, 6);(读数是带有number(21,6)类型元素的varray )
READINGS是表INTERVALS中的一列。SQL表是一个中心表,我们在INTERVALS上有批处理进程来执行INTERVALS存储过程。在存储过程中,我们具有映射到READING VArray类型元素类型的硬编码变量声明,例如,存储过程具有如下变量声明
CONSUMPTION NUMBER(21, 6);无论何时Varray定义被更改,或者varray被删除并以不同的大小和精度重新创建,ex在number(21,6)上改为number(25,9),我们需要在所有批处理存储过程中更改变量声明。我所要做的就是让消费变量声明,参考VArray的元素类型。我想要这样的东西
CONSUMPTION INTERVALS.READINGS.COLUMN_TYPE%TYPE; (我想要这样的东西,指的是varray存储的元素类型)
发布于 2013-03-06 00:40:20
为什么首先要创建一个包含VARRAY列的表?通常,使用外键为READINGS创建一个单独的表会更有意义,它允许您将行重新关联到INTERVALS表。然后,您可以很容易地声明READINGS.COLUMN_NAME%TYPE类型的列。
集合在PL/SQL中非常有用。我从来没有见过他们改进标准的标准化数据建模方法的案例。我见过许多将集合合并到您的数据模型中的情况,最终会使您的数据模型更难使用,您的代码更难编写和维护。
如果您不想修复数据模型,您可以
SUBTYPE或NUMBER(21, 6)类型的打包变量,您可以将其用作变量声明的类型。如果更改VARRAY类型的声明,则必须更改此定义。NUMBER(21,6))的对象类型,并基于该对象类型定义VARRAY。然后,您可以在代码中声明对象类型的实例。发布于 2013-03-06 01:07:29
这不是必需的解决方案,但是您可以获取类型定义的字符串,以便在动态SQL中进一步使用它
SELECT
regexp_substr(text, 'VARRAY.*?OF\s+(.+?)(;|\s)*$', 1, 1, 'i', 1)
FROM user_source
WHERE name = 'READINGS'https://stackoverflow.com/questions/15226677
复制相似问题