我想在Oracle(11g)中创建一个存储过程,它将从14-16个由FK连接的表中获取数据。 逻辑如下 - 1.从输入参数中提取主表中的键。 2.使用密钥从所有其他表中提取数据。
我还想创建与每个表对齐的Oracle类型和包含所有这些类型数组的复合TYPE。
备注:
我是oracle编程的新手。我想了解,是否可以从SP返回COMPOSITE TYPE? 如果不可能,我可以从SP返回多个TYR的ARRAY吗?
答案 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;
分享并享受。