首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用type属性检索VARRAY元素类型

使用type属性检索VARRAY元素类型
EN

Stack Overflow用户
提问于 2013-03-05 22:44:58
回答 2查看 148关注 0票数 4

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

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

代码语言:javascript
复制
CREATE TYPE "READINGS" AS VARRAY (200) OF NUMBER(21, 6);

(读数是带有number(21,6)类型元素的varray )

READINGS是表INTERVALS中的一列。SQL表是一个中心表,我们在INTERVALS上有批处理进程来执行INTERVALS存储过程。在存储过程中,我们具有映射到READING VArray类型元素类型的硬编码变量声明,例如,存储过程具有如下变量声明

代码语言:javascript
复制
CONSUMPTION NUMBER(21, 6);

无论何时Varray定义被更改,或者varray被删除并以不同的大小和精度重新创建,ex在number(21,6)上改为number(25,9),我们需要在所有批处理存储过程中更改变量声明。我所要做的就是让消费变量声明,参考VArray的元素类型。我想要这样的东西

代码语言:javascript
复制
CONSUMPTION INTERVALS.READINGS.COLUMN_TYPE%TYPE; 

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

EN

回答 2

Stack Overflow用户

发布于 2013-03-06 00:40:20

为什么首先要创建一个包含VARRAY列的表?通常,使用外键为READINGS创建一个单独的表会更有意义,它允许您将行重新关联到INTERVALS表。然后,您可以很容易地声明READINGS.COLUMN_NAME%TYPE类型的列。

集合在PL/SQL中非常有用。我从来没有见过他们改进标准的标准化数据建模方法的案例。我见过许多将集合合并到您的数据模型中的情况,最终会使您的数据模型更难使用,您的代码更难编写和维护。

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

  • 声明一个SUBTYPENUMBER(21, 6)类型的打包变量,您可以将其用作变量声明的类型。如果更改VARRAY类型的声明,则必须更改此定义。
  • 创建具有单个属性( NUMBER(21,6))的对象类型,并基于该对象类型定义VARRAY。然后,您可以在代码中声明对象类型的实例。
票数 2
EN

Stack Overflow用户

发布于 2013-03-06 01:07:29

这不是必需的解决方案,但是您可以获取类型定义的字符串,以便在动态SQL中进一步使用它

代码语言:javascript
复制
SELECT 
   regexp_substr(text, 'VARRAY.*?OF\s+(.+?)(;|\s)*$', 1, 1, 'i', 1) 
FROM user_source 
WHERE name = 'READINGS'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15226677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档