Oracle,将集合转换为现有表的类型

时间:2013-01-29 13:00:47

标签: sql oracle casting polymorphism multiset

我可以在Oracle 11g中执行类似的操作:

select cast(multiset( select * from table_name) as table_name%TYPE) from dual;

在普通的sql中,没有预先定义的类型?它支持像多态这样的东西吗?

2 个答案:

答案 0 :(得分:1)

我想更大的问题是你想在这里实现什么。根据{{​​3}},

  

MULTISET通知Oracle数据库获取结果集   子查询并返回一个集合值

因此,在您的示例中(如果正确修改),您将返回多行并将它们放入集合中。这可以是各种形式(varray,嵌套表,对象表等),但目标是从查询中填充您的集合,然后使用该集合(这就是为什么我说大问题是你是什么想要做/最终实现)。

答案 1 :(得分:0)

这是我前一段时间从某个地方复制的一些例子,并保留了我的参考资料。也许这会对你有所帮助:

-- The following objects create the basis of the example that follows:
CREATE TABLE projects 
 (employee_id NUMBER, project_name VARCHAR2(10))
/

CREATE TABLE emps_short 
   (employee_id NUMBER, last_name VARCHAR2(10))
/

CREATE TYPE project_table_typ AS TABLE OF VARCHAR2(10)
/

 -- The following example of a MULTISET expression uses these objects:
 SELECT e.last_name,
   CAST
 (
  MULTISET(SELECT p.project_name
      FROM projects p 
     WHERE p.employee_id = e.employee_id
   ORDER BY p.project_name)   AS project_table_typ  -- here's your %TYPE --
 ) 
 FROM emps_short e
 ORDER BY e.last_name
 /