Sql oracle对象和集合
只是想知道是否有人真的在Oracle中使用对象和集合?这是应该避免的吗 乙二醇Sql oracle对象和集合,sql,oracle,Sql,Oracle,只是想知道是否有人真的在Oracle中使用对象和集合?这是应该避免的吗 乙二醇 我相信很多程序员都在使用这种扩展;就我个人而言,在使用关系数据库时,我尽量坚持使用“合理标准的SQL”核心,因为我经常需要将我的SQL代码移植到其他一些数据库引擎,如果我大量使用专有扩展,移植就会变得更加困难(尽管专有扩展通常只增加很少的功能或速度)。我使用简单的集合[即VARCHAR2(4000)表],但仅用于“工作”。我实际上没有创建任何非Oracle类型的表。 我使用了Oracle提供的对象(例如MDSYS.S
我相信很多程序员都在使用这种扩展;就我个人而言,在使用关系数据库时,我尽量坚持使用“合理标准的SQL”核心,因为我经常需要将我的SQL代码移植到其他一些数据库引擎,如果我大量使用专有扩展,移植就会变得更加困难(尽管专有扩展通常只增加很少的功能或速度)。我使用简单的集合[即VARCHAR2(4000)表],但仅用于“工作”。我实际上没有创建任何非Oracle类型的表。
我使用了Oracle提供的对象(例如MDSYS.SDO_GEOM)对于地理方面的东西。我之所以避免使用它们,是因为对象与关系模型不能很好地配合。如果两者都有,则往往两者都没有。这就是为什么对象关系映射对于项目来说非常重要。如果你认真地从事PL/SQL编程,那么没有集合和对象,你几乎无法生存。这就是id,我保持数据库表“干净”,即所有列都包含原子值,没有嵌套表等。是的,我们使用集合作为存储过程的参数。这使得可以选择具有特定id(通常在列表中称为变量)的所有记录,而无需使用临时表 例如:
create or replace type numbertype
as object(nr number(20,10) )
/
create or replace type number_table
as table of numbertype
/
create or replace
procedure tableselect(p_numbers in number_table, p_ref_result out sys_refcursor)
is
begin
open p_ref_result for
select *
from employees
, (select /*+ cardinality(tab 10) */ tab.nr
from table(p_numbers) tab) tbnrs
where id = tbnrs.nr;
end;
/
还可以将此技术用于多列对象
create or replace type numbertype
as object(nr number(20,10) )
/
create or replace type number_table
as table of numbertype
/
create or replace
procedure tableselect(p_numbers in number_table, p_ref_result out sys_refcursor)
is
begin
open p_ref_result for
select *
from employees
, (select /*+ cardinality(tab 10) */ tab.nr
from table(p_numbers) tab) tbnrs
where id = tbnrs.nr;
end;
/