2014-05-03 202 views
0

我有一个名为“融合”的现有包。包定义是这样创建包创建包体记录数据类型

create or replace package "fusion' as 
create procedure first_procedure(abc in number) 
create procedure second_procedure(efg in number) 
end fusion; 

封装体的定义是一样

create or replace package body fusion as 
procedure first_procedure(abc in number) is 
begin 
.... 
end first_procedure; 
procedure second_procedure(efg in number) is 
begin 
.... 
end second_procedure; 
end fusion; 

在这种现有包,我需要包括具有一个自定义记录类型作为输出的第三步骤。那么我应该在哪里声明自定义记录类型?我已经写像

create or replace package "fusion' as 
type finalrecord is record(column1 varchar2,column2 number); 
type mytable is table of finalrecord; 
create procedure first_procedure(abc in number) 
create procedure second_procedure(efg in number) 
create procedure third_procedure(mt out mytable) 
end fusion; 

和封装主体作为

create or replace package body fusion as 
procedure first_procedure(abc in number) is 
begin 
.... 
end first_procedure; 
procedure second_procedure(efg in number) is 
begin 
.... 
end second_procedure; 
procedure third_procedure(mt out mytable) is 
myissueid number(2); 
begin 
--do something 
end third_procedure; 
end fusion; 

这在的SQLDeveloper编译,但是示出这些错误

  1. 子程序或游标“third_procedure”在包规范声明并且必须在包体中定义。

  2. MYTABLE应该声明

+0

您展示更新的软件包规范有几个错误,但它不是,如果你清楚”我们介绍了在这里更改发布代码的方法。 [它清理了一下就可以工作](http://sqlfiddle.com/#!4/9bee6/1)。假设你确实改变了它,你确实似乎在更新后的主体之前重新编译了更新的规范,但它是否说规范中有错误?如果它是干净的,那么你的类型和参数名称是否完全一样? –

回答

0

尝试使用此更新的代码编译的程序规范

create or replace package fusion as 
type finalrecord is record(column1 varchar2(20),column2 number); 
type mytable is table of finalrecord; 
procedure first_procedure(abc in number); 
procedure second_procedure(efg in number); 
procedure third_procedure(mt out mytable); 
end fusion; 
/