Oracle package包頭和package body包體例子
本文系轉載,原文地址:http://blog.itpub.net/26435490/viewspace-1078212/
一 包的組成
- 包頭(package):包頭部分申明包內資料型別,常量,變數,遊標,子程式和異常錯誤處理,這些元素為包的公有元素。
- 包主體(package body):包主體則是包定義部分的具體實現,它負責為包頭中所宣告子程式提供具體的實現,在包主體中還可以宣告包的私有元素。
- 包頭和包主體分開編譯,並作為兩個分開的物件分別存放在資料庫字典中。
二 包的語法規則
包頭的語法如下:
create or replace package 包名 As | IS procedure 過程名(); Function 函式名() return 資料型別; 變數定義; 異常定義; 游標定義; ........... ........... End 包名;
包體建立的語法:
create or replace Package Body 包名
As | IS
Procedure 過程定義;
Procedure 過程定義;
Function 函式定義;
Function 函式定義;
.........;
end 包名;
三 包的應用與舉例
下面是student 和SC表的定義:CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(4), Sage SMALLINT, Sdept CHAR(20)) tablespace starivespace; CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(6) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno,Cno), constraint f1 FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) ) tablespace starivespace
例項:定義一個包,實現如果功能: 輸入學號,分別返回該學生的所在系和相應的選課成績(如果有多門成績,那麼就輸出多門成績)。
定義包頭:
-
create or replace package sdept_or_grade as procedure print_sdept(psno char); procedure print_grade(psno char); end; /
- 程式包已建立。
建立包體:
create or replace package body sdept_or_grade as procedure print_sdept(psno char) as psdept student.sdept%type; begin select sdept into psdept from student where sno=psno; dbms_output.put_line(psdept); exception when no_data_found then dbms_output.put_line(\'Invalid student number\'); end; procedure print_grade(psno char) as pgrade SC.grade%type; cursor printgrade is select grade into pgrade from sc where sno=psno; begin open printgrade; loop fetch printgrade into pgrade; dbms_output.put_line(pgrade); exit when printgrade%notfound; end loop; close printgrade; exception when no_data_found then dbms_output.put_line(\'Invalid student number\'); end; end; /
程式包體已建立。
獲取結果:
SQL> set serveroutput on;
SQL>
SQL> execute sdept_or_grade.print_sdept(\'0201\');
cs
PL/SQL 過程已成功完成。
SQL>
SQL> execute sdept_or_grade.print_grade(\'0201\');
89
64
50
50
PL/SQL 過程已成功完成。
四 心得體會
從以上例子,和以往在實際應用中額經驗,對包的優點總結如下:
第一 包可以簡化應用程式設計:程式包的說明部分和包體部分可以分別建立各編譯。體現在以下三個方面:
1) 在設計一個應用程式,只建立各編譯程式包的說明部分,然後再編寫引用該程式包的PL/SQL塊。
2) 當完成整個應用程式的整體框架後,再回頭來定義包體部分。只要不改變包的說明部分,就可以單獨除錯、增加或替換包體的內容,這不會影響其他的應用程式。
3) 更新包的說明後必須重新編譯引用包的應用程式,但更新包體,則不需重新編譯引用包的應用程式,以快速進行應用程式的原形開發。
第二 模組化:可將邏輯相關的PL/SQL塊或元素等組織在一起,用名稱來唯一標識程式包。把一個大的功能模組劃分人適當個數小的功能模組,分別完成各自的功能。這樣組織的程式包都易於編寫,易於理解更易於管理。
第三 效率高:程式包在應用程式第一次呼叫程式包中的某個元素時,ORACLE將把整個程式包載入到記憶體中,當再次訪問程式包中的元素時,將直接從內在中讀取,而不需要進行磁碟I/O操作而影響速度,同時位於內在中的程式包可被同一會話期間的其它應用程式共享。因此,程式包增加了重用性並改善了多使用者、多應用程式環境的效率。
最後 還有提到一點: 資訊隱藏。因為包中的元素可以分為公有元素和私有元素。公有元素可被程式包內的過程、函式等的訪問,還可以被包外的PL/SQL訪問。但對於私有元素只能被包內的過程、函式等訪問。對於使用者,只需知道包的說明,不用瞭解包休的具體細節(由於時間關係,明天繼續貼出“資訊隱藏”的相關例子)。
相關推薦
Oracle package包頭和package body包體例子
本文系轉載,原文地址:http://blog.itpub.net/26435490/viewspace-1078212/ 一 包的組成 包頭(package):包頭部分申明包內資料型別,常量,變數,遊標,子程式和異常錯誤處理,這些元素為包的公有元素。 包主體(pa
package.json和package-lock.json的區別
col install ack ins 最新 怎麽 npm 5.1 根據 自npm 5.0版本發布以來,npm istall的規則發生了三次變化: 1.npm 5.0.x版本,不管package.json怎麽變,npm install時都會根據package-lock.js
關於package.json和package-lock.json的區別
5.0以後的node.js,在安裝專案的時候,會產生package-lock.json檔案。這個package-lock.json檔案,與之前的package.json檔案有什麼區別嗎? 答案: package.json檔案記錄你專案中所需要的所有模組。當你執行npm install的時候,
node中package.json和package-lock.json檔案的作用
npm5以前是不會有package-lock.json這個檔案的。可以單獨升級npm而不升級node.js npm5以後才加入了這個檔案 當你安裝包的時候,npm都會生成或者更新package-lock.json這個檔案。 npm5以後的版本安裝包不需要加–save引數,它會自動儲存依賴資訊
nodejs中package.json和package-lock.json檔案的功能分析
最新版nodejs中,多了一個package-lock.json檔案,剛開始對這個檔案很是疑惑,後來查了一番資料後,通過驗證,終於確定了這兩個檔案的關係。 package.json與package-lock.json檔案的作用 package.json檔案記錄你專案中所需
lua中的package.path和package.cpath
一. package.path用於搜尋自己寫的庫檔案或者第三方的庫檔案 --搜尋指定路徑下,以 .lua結尾的檔案 package.path = "../t/?.lua;../xjnlib/sr
Oracle物件-包頭,包體返回遊標 多引數值
前言 在編寫儲存過程或儲存函式的過程中,你可能會發現,當需要的返回值過多,就需要更多的變數來接受它。是否可能用一個游標來接受返回值?答案當然是可以的。在Oracle資料庫中,可以定義包頭和包體。包頭相當於宣告,而包體則是邏輯實現。例項包頭宣告如下:CREATE OR R
Oracle包和包體
create or replace package PKG_TCAS_DEPOT_CORE_CALC is --計提月份 g_commis_month date; /* *分攤計算任務 */ procedure stp_commi
ORACLE建立包和包體及包中函式和儲存過程
背景:在Oracle資料庫建立包,在包建立函式Function和儲存過程Procedure。在java專案中呼叫。 建立包,並在下面宣告包含的函式和儲存過程: create or replace p
Nodejs 包與 NPM 第三方模組安裝和 package.json 以及 CNPM
包與 NPM Nodejs 中除了它自己提供的核心模組外,我們可以自定義模組,也可以使用 第三方的模組。Nodejs 中第三方模組由包組成,可以通過包來對一組具有相互依 賴關係的模組進行統一管理。 完全符合 CommonJs 規範的包目錄一般包含如下
swoole學習筆記(五)網路通訊協議設計 -- EOF結束符協議和固定包頭+包體協議
上2篇筆記講述了TCP伺服器端和TCP客戶端,既然他們之間要互相通訊,必須要制定一套通訊協議。 swoole目前支援2種通訊協議:EOF結束符協議和固定包頭+包體協議 一、EOF結束符協議 EOF協
Python Module和Package辨析
.html 執行 i++ ide pretty ras 內容 color param Python 基礎學習 說明 這不是最基礎的新手教程,如需了解Python的數據類型、變量等基礎內容,請移步:https://docs.python.org/
PL/SQL 編程(三 )程序包和包體,觸發器,視圖,索引
rep upd 索引 itl 數據檢索 一鍵 代碼 dep pl/sql conn scott/tiger; grant insert,update,delete on emp to system; conn system/orcl1234; create or
oracle 調用包體的函數並返回return值
datarow ret .com rect tex ring catch param finally /// <summary> /// 執行數據庫包體操作,返回結果 /// </summary> /// <param name="cmdTe
npm和package.json那些不為常人所知的小祕密
此文已由作者黃鍇授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 強大的命令功能 如果你沒使用過script,那你可算是從來沒手動編輯過package.json。script作為package.json裡最強大的功能,它賦予你新增指令碼的能力。特別是從[email prot
Android Studio中的package name和application ID
在Eclipse中只有package name的概念,沒有application ID。而在Android Studio 中把package name 拆分為了兩部分package name和application ID。 Android Studio 中的application ID和
package-lock.json和package.json的作用
狀態 保持 可能 管理器 例如 ejs 方式 超過 一個 轉自:https://www.cnblogs.com/cangqinglang/p/8336754.html package-lock.json的作用就是鎖定安裝依賴時包的版本,並且需要上傳到git,以保證其他人np
java中package命名規則,Java包(package)的命名規範
Java的包名都有小寫單片語成,類名首字母大寫;包的路徑符合所開發的 系統模組的 定義,比如生產對生產,物資對物資,基礎類對基礎類。以便看了包名就明白是哪個模組,從而直接到對應包裡找相應的實現。 由於Java面向物件的特性,每名J
Java中許可權控制,import 和 package 關鍵字
概況表: 目錄結構為:我們在com.java17包下建立了兩個class:Demo01、Demo02。 舉例一: Demo01: package com.java17; public class Demo01 { private Strin
Eclipse中Outline和Package Explorer中顯示的小圖示的意義
裡面總共分為三種類型: 1. 顏色:紅、黃、綠 2. 形狀:方、菱、圓 3. 內部:實心、空心 其中:紅色方塊 代表 private 黃色菱形 代表 protected 綠色圓形 代表 public 實心