1. 程式人生 > >PLSQL 基礎教程 五 常用資料庫物件簡介(函式儲存過程包)

PLSQL 基礎教程 五 常用資料庫物件簡介(函式儲存過程包)

本文簡要介紹PLSQL中常用的一些資料庫物件,主要包括函式、儲存過程和包等等,將從相關的簡介、語法、用途等等方面進行介紹。

1.       函式

簡介

函式是Oracle中的一個可以單獨存在的資料庫物件,主要用於封裝一些業務處理邏輯,同時在處理完成相關邏輯之後必須返回一個結果值。

建立語法

函式的建立語法如下:

 
--函式的建立語法
CREATEFUNCTION函式名(引數1IN引數1型別,引數2 IN引數2型別, .. .)
       RETURNIS函式的返回值型別;
BEGIN
--業務邏輯處理程式碼
RETURN函式的返回值(型別與定義的返回型別一致即可);
END函式名;

語法格式說明:

a. 建立函式的關鍵字為 FUNCTION

b. 函式名可以自定義,不能與系統已有的衝突

c. 函式的引數可以根據需要有多個,也可以沒有引數

d. 函式一定有返回值,而且返回值的型別和函式的定義中的返回值型別必須保持一致

函式舉例

此處已兩個簡單的函式為例進行說明,一個是帶引數的函式,另一個是不帶引數的函式:

a. 帶引數的函式

--帶兩個引數的函式
--返回兩個引數之和
createorreplacefunction cux_sum(num1number, num2 number)
returnnumberis
 
begin
  return num1 + num2;
end cux_sum;
 
--測試函式的呼叫
SELECT CUX_SUM(1,2)FROM DUAL



可以看到上述函式的功能是求兩個整數引數之和。

帶引數函式的呼叫直接通過 函式名(引數) 呼叫即可,不同的使用者可以在函式名前加上所屬使用者即 所屬使用者.函式名(引數) 的形式進行呼叫。

b. 不帶引數的函式

--不帶引數的函式
CREATEORREPLACEFUNCTION CUX_SUM2
RETURNVARCHAR2IS
BEGIN
  RETURN'Y';
END CUX_SUM2;
 
--測試函式的呼叫
SELECT CUX_SUM2FROM DUAL;
 


可以看到上述函式的功能是返回一個字串“Y”。

不帶引數的函式的呼叫直接通過 函式名 呼叫即可,不同的使用者可以在函式名前加上所屬使用者即所屬使用者.函式名  的形式進行呼叫。

簡介

與函式類似,儲存過程也是一種可以單獨儲存在Oracle資料庫中的一種物件,也是用於封裝一些業務處理邏輯,只是儲存過程沒有返回值,但是有輸出引數。

建立語法

--儲存過程語法
CREATEORREPLACEPROCEDURE儲存過程名(引數1INOUT引數1型別,引數2 INOUT引數2型別, .. .) IS
BEGIN
 
    --業務邏輯處理程式碼  
 
END儲存過程名;

語法格式說明:

e. 建立儲存過程的關鍵字為 PROCEDURE

f. 儲存過程名可以自定義,不能與系統已有的衝突

g. 儲存過程的引數可以根據需要有多個,也可以沒有引數,其中 IN 或者OUT是用於標識該引數是輸入引數還是輸出引數的

h. 儲存過程沒有返回值,但是可以有輸出引數

a. 帶引數的儲存過程

--儲存過程舉例
--求兩個整數之和
CREATEORREPLACEPROCEDURE CUX_PRO(NUM1INNUMBER,
                                    NUM2INNUMBER,
                                    NUM3OUTNUMBER)IS
BEGIN
 
  --業務邏輯處理程式碼  
  NUM3 := NUM1 + NUM2;
END CUX_PRO;

由於儲存過程沒有返回值,因此不能像函式一樣直接在SQL語句中使用,只能存在於程式碼塊中(PLSQL程式碼塊的知識後續講解),此處為了演示方便直接在PLSQL視窗中進行測試呼叫:

直接通過SQL查詢語句呼叫儲存會報錯。

 


可以看到該儲存過程的邏輯是把輸入的兩個引數求和的值賦值給力輸出引數。

儲存過程必須存在於程式碼塊中,帶引數的儲存的呼叫直接通過儲存過程名(引數) 呼叫即可,不同的使用者可以在函式名前加上所屬使用者即所屬使用者. 儲存過程名(引數)  的形式進行呼叫。

不帶引數的儲存過程呼叫的時候去掉後邊的括號和引數即可。 

相同點:

函式和儲存過程都是資料庫中的資料物件,可以單獨儲存;

函式和儲存過程都是可以處理相關的業務邏輯;

函式和儲存過程都是可以存在於PLSQL程式碼塊中的

不同點:

函式有返回值,而儲存過程沒有;

儲存過程有輸出引數,而函式沒有;

函式可以存在於SQL查詢語句中,而儲存過程不可以   

4.       包

簡介

包 PACKAGE,也是資料庫中的一種物件,一般主要用來管理一組函式和儲存過程的單元,我們可以把某一型別或者某一個功能模組的函式和儲存過程統一定義在一個包中,便於維護和管理。

建立語法

包的建立分為兩部分,包頭和包體

包頭的定義:

--包頭定義語法
CREATEORREPLACEPACKAGE包名IS
 
 
  --主要用於申明變數、函式、儲存過程等等
 
END包名;

包體的定義: 

CREATEORREPLACEPACKAGEBODY包名IS
 
  --相關的變數賦值、函式和儲存過程的具體實現邏輯等等
 
BEGIN
  -- INITIALIZATION
  <STATEMENT>;
END包名;

包舉例

我們將之前建立的函式和儲存過程定義到一個新建的包中,以此來演示包的用法:

--包使用舉例
--包頭定義
CREATEORREPLACEPACKAGE CUX_TEST_PKGIS
 
  --定義函式
  FUNCTION CUX_SUM(NUM1NUMBER, NUM2 NUMBER) RETURNNUMBER;
 
  --定義儲存過程
  PROCEDURE CUX_PRO(NUM1INNUMBER, NUM2INNUMBER, NUM3OUTNUMBER);
 
END CUX_TEST_PKG;
 
--包體定義
CREATEORREPLACEPACKAGEBODY CUX_TEST_PKGIS
 
  FUNCTION CUX_SUM(NUM1NUMBER, NUM2 NUMBER) RETURNNUMBERIS
  BEGIN
    RETURN NUM1 + NUM2;
  END CUX_SUM;
 
  PROCEDURE CUX_PRO(NUM1INNUMBER, NUM2INNUMBER, NUM3OUTNUMBER)IS
  BEGIN
 
    --業務邏輯處理程式碼  
    NUM3 := NUM1 + NUM2;
  END CUX_PRO;
 
END CUX_TEST_PKG;

使用了包之後,再次呼叫函式和儲存過程的話,就按照 包名.函式名(引數)和 包名.儲存過程名(引數) 進行呼叫即可

此處已函式為例進行演示:

SELECT CUX_TEST_PKG.CUX_SUM(1,4) FROM DUAL;


5. 附錄

a. 本系列教程為個人原創,基於實際工作中的使用情況及個人理解,僅供學習交流之用,有不足之處還望批評指正,希望共同提高

b. 本節相關指令碼

--帶兩個引數的函式
--返回兩個引數之和
CREATE OR REPLACE FUNCTION CUX_SUM(NUM1 NUMBER, NUM2 NUMBER) 
RETURN NUMBER IS
BEGIN
  RETURN NUM1 + NUM2;
END CUX_SUM;


--測試函式的呼叫
SELECT CUX_SUM(1,2) FROM DUAL;

--不帶引數的函式
CREATE OR REPLACE FUNCTION CUX_SUM2
RETURN VARCHAR2 IS
BEGIN
  RETURN 'Y';
END CUX_SUM2;


--測試函式的呼叫
SELECT CUX_SUM2 FROM DUAL;



--儲存過程舉例
--求兩個整數之和
CREATE OR REPLACE PROCEDURE CUX_PRO(NUM1 IN NUMBER,
                                    NUM2 IN NUMBER,
                                    NUM3 OUT NUMBER) IS
BEGIN

  --業務邏輯處理程式碼   
  NUM3 := NUM1 + NUM2;
END CUX_PRO;


--儲存過程不能直接在SQL查詢中呼叫
--select CUX_PRO(1,2,3) from dual


--包使用舉例
--包頭定義
CREATE OR REPLACE PACKAGE CUX_TEST_PKG IS

  --定義函式
  FUNCTION CUX_SUM(NUM1 NUMBER, NUM2 NUMBER) RETURN NUMBER;
  
  --定義儲存過程
  PROCEDURE CUX_PRO(NUM1 IN NUMBER, NUM2 IN NUMBER, NUM3 OUT NUMBER);
  
END CUX_TEST_PKG;

--包體定義
CREATE OR REPLACE PACKAGE BODY CUX_TEST_PKG IS

  FUNCTION CUX_SUM(NUM1 NUMBER, NUM2 NUMBER) RETURN NUMBER IS
  BEGIN
    RETURN NUM1 + NUM2;
  END CUX_SUM;

  PROCEDURE CUX_PRO(NUM1 IN NUMBER, NUM2 IN NUMBER, NUM3 OUT NUMBER) IS
  BEGIN
  
    --業務邏輯處理程式碼   
    NUM3 := NUM1 + NUM2;
  END CUX_PRO;

END CUX_TEST_PKG;

SELECT CUX_TEST_PKG.CUX_SUM(1,4) FROM DUAL;

相關推薦

PLSQL 基礎教程 常用資料庫物件簡介(函式儲存過程)

本文簡要介紹PLSQL中常用的一些資料庫物件,主要包括函式、儲存過程和包等等,將從相關的簡介、語法、用途等等方面進行介紹。 1.       函式 簡介 函式是Oracle中的一個可以單獨存在的資料庫物件,主要用於封裝一些業務處理邏輯,同時在處理完成相關邏輯之後必須返

Spring Boot基礎教程 ( )

首先,回顧並詳細說明一下在快速入門中使用的@Controller、@RestController、@RequestMapping註解。如果您對Spring MVC不熟悉並且還沒有嘗試過快速入門案例,建議先看一下快速入門的內容。 @Controller:修飾class,用來建立處理http

SpringCloud 基礎教程() 服務熔斷機制(Eureka + Ribbon + Hystrix)

1、啟動【服務中心】叢集,即 Eureka Server 參考 SpringCloud 基礎教程(一) 服務中心及叢集(Eureka Server) 2、啟動【服務提供者】叢集,即 Eureka Client 參考 SpringCloud 基礎教程(二) 服務註冊及叢集(Eureka C

plsql基礎學習--plsql塊應用

pl/sql塊結構 1.語法: declare --宣告   variables,cursors,user-defined exceptions begin --執行部分   sql statements   pl/sql statements exceptio

Scala基礎教程(一):簡介、環境安裝

Scala基礎語法 如果有很好的瞭解Java語言,那麼將很容易學習Scala。 Scala和Java間的最大語法的區別在於;行結束符是可選的。考慮Scala程式它可以被定義為通過呼叫彼此方法進行通訊的物件的集合。現在,簡要地看看什麼叫做類,物件,方法和臨時變數。 ·    

PLSQL 基礎教程 二 增刪改(DML)

1.       DML簡介 DML含義 DML,全稱為Data Manipulation Language,即資料操作語言,主要用於檢索或者操作資料庫中的資料。 與前一節文章中介紹的DDL不同,DDL是用於建立或者刪除資料庫物件的,而DML並不是對資料物件做的操作,只

PLSQL 基礎教程 四 分組查詢

本節教程繼續介紹SQL中的分組查詢相關的知識及一些簡單的使用說明。 概念 分組查詢也是SQL中比較常用的一種,是對SELECT查詢的一個細化、彙總,用於根據某些條件,並結合聚合函式 COUNT(*) ,將一個查詢結果進行分組統計,獲得對應的條件的統計資料資訊 如果需

J2EE基礎教程(1):簡介和windows下環境配置

(1)相關概念 我們以前在linux作業系統初級教程中,介紹過LAMP架構伺服器技術。現在,我們來介紹J2EE。 通過J2EE開發的應用程式屬於分散式多層應用程式,包括 (1)客戶層:客戶應用,web瀏覽器的動態網頁(含applet) (2)web層:

常用資料庫物件儲存過程

序列:          所謂序列,在oracle中就是一個物件,這個物件用來提供一個有序的資料列,這個有序的資料列的值都不重複。          1.序列可以自動生成唯一值          2.是一個可以被共享的物件          3.典型的用來生成主鍵值的

Oracle資料庫物件簡介

Oracle資料庫資料物件中最基本的是表和檢視,其他還有約束、序列、函式、儲存過程、包、觸發器等。對資料庫的操作可以基本歸結為對資料物件的操作,理解和掌握Oracle資料庫物件是學習Oracle的捷徑。   表和檢視   Oracle中表是資料儲存的基本結構。ORACL

c 基礎教程:c 選擇結構

前面我們看到的程式碼都是順序執行的,也就是先執行第一條語句,然後是第二條、第三條……一直到最後一條語句,這稱為順序結構。 但是對於

GStreamer基礎教程12 - 常用命令工具

摘要   GStreamer提供了不同的命令列工具用於快速的檢視資訊以及驗證Pipeline的是否能夠正確執行,在平時的開發過程中,我們也優先使用GStreamer的命令列工具驗證,再將Pipeline整合到應用中。本文將介紹gst-inspect-1.0,gst-discoverer-1.0,gst-lau

個人-基礎常見種比較數的函式

#C常見的幾種比較 我用的VS2013,標頭檔案與原始檔分開,在此只貼出函式。 給定兩個整形變數的值,將兩個值的內容進行交換。 void compare(){ int a = 10; int b = 20; int tmp = 0; tmp = a; a =

jQuery基礎教程之DOM操作-節點操作函式(一)

jQuery作為Javascript的一個強大的庫,其對DOM物件的操作之簡化,讓開發人員甚至於小白們都為之讚歎不已。 接著上一個系列的jQuery選擇器的教程,接下來教大家的是jQuery中的DOM操作。為了方便大家更加容易對jQuery中的各種操作DOM物件的函式進行理解。今天我花了一天的時間自己構建了

踩坑經歷()一次關於MySQL儲存過程的排錯

SQL語句 -- #開啟定時器,預設為關閉狀態 set global event_scheduler =1; #或者set GLOBAL event_scheduler = ON; use monitorsys; drop event if exists report_back

SQL Server資料庫開發(6.儲存過程

一、儲存過程(procedure) 1.定義:用來執行管理業務或應用複雜的業務規則 儲存過程可以帶引數,也可以返回結果。 2.儲存過程可以包含資料操縱語句、變數、邏輯控制語句 3.儲存過程的優點: 3.1允許模組化程式設計 一次建立多次使用,並可獨立於原始碼而單獨

資料庫——SQL Server的儲存過程

上一篇部落格總結了許多資料庫常用的SQL語句,今天我們就來看一下SQL的儲存過程。 簡單來說,儲存過程就是一條或者多條sql語句的集合,可視為批處理檔案,但是其作用不僅限於批處理。 本篇主要介紹變數的使用,儲存過程和儲存函式的建立,呼叫,檢視,修改以及刪除操作。上一篇部落格對這一部分內容也有

Sql Server 資料庫表結構,儲存過程,檢視比較指令碼

  頂級乾貨   用來比較兩個資料庫之間 表結構,儲存過程及檢視差異的儲存過程,直接複製對應的儲存過程,無需改動,直接在資料庫中執行(傳遞要比較的資料庫引數)即可 1.兩個資料庫之間儲存過程及檢視差異比較的儲存過程 --測試指令碼 --exec [p_com

Oracle資料庫學習筆記四——儲存過程的值傳遞和引用傳遞

程式語言中的4種子例程: 由兩種行為定義,即形式值是否返回以及引數列表是值傳遞還是引用傳遞。 如果返回輸出,子例程就是函式,如果不返回,就是過程。 所以4中子例程為: 1.值傳遞函式 2.引用傳遞函式 3.值傳遞過程 4.引用傳遞過程pl/sql值傳遞過程由下列5條規則定義

資料庫索引-檢視-觸發器-儲存過程

我們應該從這四點中學到什麼。(個人總結) 關於索引 在資料庫裡面建立索引是為了加快資料的查詢速度,但是索引在資料庫中會佔用一小部分儲存空間來儲存索引資訊,因此,利用索引提高查詢效率是以佔用空間和增加資料更改的時間為代價的。 索引分為兩