创建与现有 Oracle 表结构相同的 Oracle 类型

Posted

技术标签:

【中文标题】创建与现有 Oracle 表结构相同的 Oracle 类型【英文标题】:create Oracle type of the same structure as an existing Oracle table 【发布时间】:2019-12-09 17:46:08 【问题描述】:

我正在尝试在 Oracle PL/SQL 存储过程中保存一些 Java 集合。

有谁知道,是否有办法?我想避免为每个 Java 集合创建大量 CREATE OR REPLACE TYPE t_row AS OBJECT(...); ,然后创建 CREATE OR REPLACE TYPE t_list AS TABLE OF t_row;

换句话说,我想创建类似的东西:

CREATE OR REPLACE TYPE typename AS TABLE OF schema.existing_table;

我试图通过网络查找一些信息,但似乎没有任何类似的主题。

任何提示将不胜感激。

【问题讨论】:

不幸的是,Oracle 不支持该功能。堆表可以定义为一个类型,也可以有类型的列。我怀疑避免递归噩梦的工作量太大,无法证明实际使用 ORDBMS 功能的 Oracle 客户的比例相对较小。但当然,这将是一个简洁的功能,可以让 Types 在构建 API 时更加有用。 【参考方案1】:

类型必须是 SQL 类型吗?如果您可以使用 PL/SQL 类型,则可以声明 %ROWTYPE 记录的集合。大概,您会在一个或多个包中创建类型,然后在适当的地方使用它们。

create table foo (
  col1 number,
  col2 number
);

create or replace package my_collections
as
  type foo_tbl is table of foo%rowtype;
end;
/

declare
  foos my_collections.foo_tbl := new my_collections.foo_tbl();
begin
  foos.extend(1);
  foos(1).col1 := 1;
  foos(1).col2 := 2;

  dbms_output.put_line( foos.count );
end;
/

【讨论】:

以上是关于创建与现有 Oracle 表结构相同的 Oracle 类型的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中数据库、数据文件、表、表空间、用户之间是啥关系(转)

如何根据现有模式在 Oracle 中编写表结构?

用oracle创建一个表

postgresql----根据现有表创建新表

用oracle创建一个表

如何在 oracle 中以与现有帐户相同的权限复制模式?