Oracle 基礎 ----package

tieshuai發表於2008-03-01

                 

  Oracle 基礎 ----package

 

pl/sql程式設計中,使用程式包這種結構組織過程,函式等,可以使程式設計實現模組化,從而提高程式的編寫效率,還可以提高程式的執行效率。

 

儅在程式中首次呼叫包的函式或過程時,oracle將會把整個程式調入記憶體,儅再次訪問包內元素時,oracle 會直接從記憶體中讀取,而不需要重新從磁碟上載入,從而使程式執行效率得到提高。

 

程式包的規範是程式包的介面,在規範中定義的所有內容都可以由呼叫者使用,在規範中定義的過程可以被呼叫者呼叫執行,變數,型別可以被引用。

 

SYS AS SYSDBA on 2008-03-01 15:27:08 at ORCL>create or replace package variable_test_PKG is

  2    public_variable varchar2(20);

  3    procedure set_private_variable(p_para varchar2);

  4    procedure print;

  5    end variable_test_PKG;

  6  /

 

已建立套裝程式.

 

SYS AS SYSDBA on 2008-03-01 15:27:32 at ORCL>  create or replace package body variable_test_PK

G is

  2    private_variable varchar2(20);

  3    procedure set_private_variable(p_para varchar2) is

  4    begin

  5      private_variable:=p_para;

  6    end set_private_variable;

  7    procedure print is

  8    begin

  9     dbms_output.put_line(private_variable);

 10   end print;

 11   end variable_test_PKG;

 12  /

 

已建立套裝程式主體.

SYS AS SYSDBA on 2008-03-01 15:32:35 at ORCL>BEGIN

  2   VARIABLE_test_pkg.public_variable:='HELLO world';

  3  end ;

  4  /

 

PL/SQL 程式順利完成.

 

SYS AS SYSDBA on 2008-03-01 15:34:41 at ORCL>exec dbms_output.put_line(variable_test_pkg.publi

c_variable);

HELLO world

 

PL/SQL 程式順利完成.

 

如上,對於公共變數的訪問。,如果訪問私有變數則會產生錯誤資訊。

預設情況下,使用者可以使用程式包所有者的許可權。

使用authid current_user,指定使用者執行程式包時使用自己的許可權。

在函式,和過程 中也可以使用authid current_user語句,使得使用者在呼叫該過程時,使用自己的許可權。

 

如:

 Create or replace procedure searchPro(id in number) authid current_user is

  

End searchPro;

 

依賴性:

過程,函式,和其它物件一樣,都有依賴性,依賴其它的物件,

儅使用者將過程成功編譯並被資料庫儲存後,其被標識為有效,如果過程所依賴的物件發生改變,即使改變沒有影響使用者過程,該過程也會被表識為無效。

SYS AS SYSDBA on 2008-03-01 15:51:35 at ORCL>describ user_dependencies;

 名稱                                      空值?    型別

 ----------------------------------------- -------- ----------------------------

 NAME                                      NOT NULL VARCHAR2(30)

 TYPE                                               VARCHAR2(17)

 REFERENCED_OWNER                                   VARCHAR2(30)

 REFERENCED_NAME                                    VARCHAR2(64)

 REFERENCED_TYPE                                    VARCHAR2(17)

 REFERENCED_LINK_NAME                               VARCHAR2(128)

 SCHEMAID                                           NUMBER

 DEPENDENCY_TYPE                                    VARCHAR2(4)

 

SYS AS SYSDBA on 2008-03-01 15:51:43 at ORCL>describe user_objects;

 名稱                                      空值?    型別

 ----------------------------------------- -------- ----------------------------

 OBJECT_NAME                                        VARCHAR2(128)

 SUBOBJECT_NAME                                     VARCHAR2(30)

 OBJECT_ID                                          NUMBER

 DATA_OBJECT_ID                                     NUMBER

 OBJECT_TYPE                                        VARCHAR2(19)

 

 

User_dependencies

 

User_objects;

 

例項化,過載 java, c#語言一樣。

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/701141/viewspace-198175/,如需轉載,請註明出處,否則將追究法律責任。

相關文章