Ale*_*lex 10 oracle user-defined-types
我正在为数据库类编写一个赋值,我们需要将现有的关系模式迁移到Oracle对象.这整个崩溃让我感到疑惑,这些东西有多广泛使用?数据模型很糟糕,语法很糟糕,而且面向对象只占实现方式的四分之三左右.
有人真的使用这个吗?
APC*_*APC 13
对于初学者,一些标准的Oracle功能使用Types,例如XMLDB和Spatial(包括声明嵌套表数据类型的列).
此外,许多PL/SQL开发人员一直使用类型来声明PL/SQL集合或流水线函数.
但我同意很少有地方广泛使用类型并从中构建PL/SQL API.有几个原因.
SUPER()直到版本11g 才得到.即使是现在也缺少一些功能,最明显的是TYPE BODY中的私人声明. 最后一点是关键点.我们可以学习新语法,我们可以说服Oracle完成功能集,但只有我们能够为类型提供用途才有用.这意味着我们需要使用继承和多态来解决的问题.
我曾经在一个广泛使用类型的系统上工作过.它是一个数据仓库系统,数据加载子系统是由类型构建的.基本原理很简单:
Type实现是干净的:通用过程在Type中定义; 每个表的实现都在一个继承自该泛型Type的Type中定义.可以从元数据生成特定类型.几年前我在UKOUG上介绍过这个主题,我在博客上写了更详细的内容.了解更多.
顺便说一下,关系理论包括域的概念,它是用户定义的数据类型,包括约束等.没有RDBMS的味道实际上支持域,但Oracle的类型实现绝对是一步.
Ada*_*sch 10
我从来没有见过它的好处,主要是因为当我上次检查它时,你的对象定义一旦被表使用就不可变.
因此,如果您在Customer表定义中使用了Address对象,那么在不删除Customer表或者不得不进行非常难以实现的转换的情况下,您永远不会更改Address对象定义.
对象适用于数据实例化 - 就像应用程序所做的那样 - 但对于数据存储和基于集合的操作,我只是看不到重点.
许多其他答案给出了使用对象确实有意义的好例子; 通常,这些是处理某些特定的,可能是复杂的数据类型.Oracle本身将它们用于地理空间数据.
什么是不常见的做,但它会伤心地出现在一些大学课程,是使用基于对象的表,而不是常规关系表来保存像员工和部门这样的常规数据:
create type emp_t as object (empno number, ename varchar2(10), ...);
create table emp of emp_t;
Run Code Online (Sandbox Code Playgroud)
虽然这些可能是教授概念的简单示例,但我担心它们可能会导致新一代数据库开发人员认为这种方法更合适,更现代,因此比"老式"关系表更好.它着重说不是.
我只听说它被用在一个地方,所涉及的开发人员正在转而远离它.我曾经考虑过纯粹在PL/SQL中使用它,但是因为我们的DBA不会让我们安装任何类型,因为担心我们可能会在表中使用它们,这种情况不太可能发生.
分享和享受.
| 归档时间: |
|
| 查看次数: |
3237 次 |
| 最近记录: |