Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 使用type属性检索VARRAY元素类型_Oracle_Plsql - Fatal编程技术网

Oracle 使用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存储过程。在存储过程中,我们有硬编

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

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

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'