Oracle Stored Proc-我可以返回一个由许多其他STRUCT组成的复合TYPE吗?

时间:2014-04-09 15:48:04

标签: database algorithm plsql oracle11g

我想在Oracle(11g)中创建一个存储过程,它将从14-16个由FK连接的表中获取数据。 逻辑如下 - 1.从输入参数中提取主表中的键。 2.使用密钥从所有其他表中提取数据。

我还想创建与每个表对齐的Oracle类型和包含所有这些类型数组的复合TYPE。

备注:

  1. 很少有表可能没有该Key的数据。如果特别缺少数据,我会为该表返回空白STRUCT。
  2. 某些表可能有给定键的多行。我们将填充ARRAY的TYPE映射到该表。
  3. 我是oracle编程的新手。我想了解,是否可以从SP返回COMPOSITE TYPE? 如果不可能,我可以从SP返回多个TYR的ARRAY吗?

2 个答案:

答案 0 :(得分:1)

是的,可以在SQL和PL / SQL中构建复合类型。以下是使用对象类型的示例:

drop table table2;

create table table1(a number, b number);
create table table2(a number, b number);

create or replace type table1_type is object
(
    a number,
    b number
);

create or replace type table2_type is object
(
    a number,
    b number
);

create or replace type table1_nt is table of table1_type;
create or replace type table2_nt is table of table1_type;

create or replace type table_1_2_type is object
(
    table1 table1_nt,
    table2 table2_nt
);

table_1_2_type现在可以用作返回类型或OUT类型。

遗憾的是,类型定义非常重复。 %TYPE和%ROWTYPE运算符在SQL中不起作用,并且根据您使用这些对象的方式,它们必须定义为SQL类型。

答案 1 :(得分:0)

当然,你可以做到。我们说你的类型是XYZ_TYPE。你创建了你的函数(如果你想返回一个TYPE实例,它必须是一个函数)

CREATE OR REPLACE FUNCTION XYZ_FUNC(pParm_1  IN NUMBER,  -- or whatever
                                    pParm_2  IN NUMBER)  -- etc, blah
  RETURN XYZ_TYPE
IS
  nVar_1  NUMBER;  -- or whatever
  tResult XYZ_TYPE;
BEGIN
  -- whatever

  RETURN tResult;
END XYZ_FUNC;

分享并享受。