用 plsql developer 寫包和包體, 切記不能在同一個SQL window 中同時執行,
如: 一個SQL window 中
create or replace package My_Package is
Function getRowcountByTable(tablename in varchar2) return number;
PROCEDURE doSomeThing ();
end My_Package;
create or replace package body My_Package is
Function getRowcountByTable(tablename in varchar2)
return number
is
begin
return 0;
end;
PROCEDURE doSomeThing()
is
begin
.....................
end;
end My_Package;
--其他代碼
-------------------------------------------------------------------------------------------------------------------------------------------------
這樣子的代碼貌似沒有什麼問題, 如果你執行F8執行一次, 執行成功, 但是包編譯出錯,
如果把上面 SQL Window 裡面建立包和包體的語句分開執行或分2個視窗執行, 就沒有問題, 原因是什麼呢?
--------------------------------------------------------------------------------------------------------------------------------------------------
我們來查查My_Package 的原始碼, 通過下面的sql 語句:
select text from user_source t where t.name='MY_PACKAGE' and type='PACKAGE';
我們按F8 執行, My_Package 的原始碼居然是整個SQL Window 裡面執行的內容, 顯然這是不正確的, 這就是為什麼包編譯出錯的原因了.
我手頭沒有其他oracle 用戶端工具了, 無法測試這是plsql developer 工具的原因還是本身oracle 的問題.
由於包和包體的名稱相同, 並且包裡面有很多分號; , 這樣導致了oracle 本身不好解析包的原始碼嗎? 或者根本不解析了??