2014-05-03 200 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; 
/