oracle 存儲(chǔ)過程、函數(shù)和觸發(fā)器用法實(shí)例詳解
本文實(shí)例講述了oracle 存儲(chǔ)過程、函數(shù)和觸發(fā)器用法。分享給大家供大家參考,具體如下:
一、存儲(chǔ)過程和存儲(chǔ)函數(shù)
指存儲(chǔ)在數(shù)據(jù)庫(kù)中供所有用戶程序調(diào)用的子程序叫存儲(chǔ)過程、存儲(chǔ)函數(shù)。
創(chuàng)建存儲(chǔ)過程
用CREATE PROCEDURE命令建立存儲(chǔ)過程。
語法:
create [or replace] procedure 過程名(參數(shù)列表) as PLSQL子程序體;
--給指定員工漲工資 create procedure addSal(empid in number) as psal emp.sal%type; begin select sal into psal from emp where empno=empid; update emp set sal = sal * 1.1 where empno=empid; dbms_output.put_line(empid || '漲工資前' || psal || '漲工資后' || (psal * 1.1)); end;
調(diào)用存儲(chǔ)過程
--方法一 begin addSal(7369); end; --方法二 exec addSal(7369);
存儲(chǔ)函數(shù)
函數(shù)為一命名的存儲(chǔ)程序,可帶參數(shù),并返回一計(jì)算值。函數(shù)和過程的結(jié)構(gòu)類似,但必須有一個(gè)return子句,用于返回函數(shù)值。函數(shù)說明要指定函數(shù)名,結(jié)果值的類型,以及參數(shù)類型等。
創(chuàng)建語法:
CREATE [OR REPLACE] FUNCTION 函數(shù)名 (參數(shù)列表) RETURN 函數(shù)值類型 AS PLSQL子程序體;
--查詢指定員工的年收入 create function queryEmpSal(empid in number) return number as psal emp.sal%type; pcomm emp.comm%type; begin select sal,comm into psal,pcomm from emp where empno=empid; return (psal*12) + nvl(pcomm,0); end;
函數(shù)的調(diào)用
declare psal number; begin psal:=queryEmpSal(7369); dbms_output.put_line(psal); end;
或
begin dbms_output.put_line(queryEmpSal(7369)); end;
過程和函數(shù)中的IN和OUT
一般來講,過程和函數(shù)的區(qū)別在于函數(shù)可以有一個(gè)返回值,而過程沒有返回值。
但過程和函數(shù)都可以通過out指定一個(gè)或多個(gè)輸出參數(shù)。我們可以利用out參數(shù),在過程和函數(shù)中實(shí)現(xiàn)返回多個(gè)值。
什么時(shí)候用存儲(chǔ)過程或函數(shù)?
原則:如果只有一個(gè)返回值,用存儲(chǔ)函數(shù),否則,就用存儲(chǔ)過程。
創(chuàng)建包和包體
什么是包和包體?
包是一組相關(guān)過程、函數(shù)、變量、常量、類型和游標(biāo)等PL/SQL程序設(shè)計(jì)元素的組合。包具有面向?qū)ο笤O(shè)計(jì)的特點(diǎn),是對(duì)這些PL/SQL程序設(shè)計(jì)元素的封裝。
包體是包定義部分的具體實(shí)現(xiàn)。
包由兩個(gè)部分組成:包定義和包主體。
--包定義 create [or replace] package 包名 as [公有數(shù)據(jù)類型定義] [公有游標(biāo)聲明] [公有變量、常量聲明] [公有子程序聲明] end 包名;
--包主體 create [or replace] package body 包名 as [私有數(shù)據(jù)類型定義] [私有變量、常量聲明] [私有子程序聲明和定義] [公有子程序定義] begin PL/SQL子程序體; end 包名;
--創(chuàng)建mypackage包 create or replace package mypackage as procedure total(num1 in number, num2 in number, num3 out number); end mypackage;
--mypackage包體 create or replace package body mypackage as --計(jì)算累加和的total過程 procedure total(num1 in number, num2 in number, num3 out number) as tmp number := num1; begin if num2 < num1 then num3 := 0; else num3 := tmp; loop exit when tmp > num2; tmp := tmp + 1; num3 := num3 + tmp; end loop; end if; end total; end mypackage;
(*注意:包定義和包體要分開創(chuàng)建)
調(diào)用包
declare num1 number; begin mypackage.total(1, 5, num1); dbms_output.put_line(num1); end;
更多關(guān)于Oracle相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Oracle常用函數(shù)匯總》、《Oracle日期與時(shí)間操作技巧總結(jié)》及《php+Oracle數(shù)據(jù)庫(kù)程序設(shè)計(jì)技巧總結(jié)》
希望本文所述對(duì)大家Oracle數(shù)據(jù)庫(kù)程序設(shè)計(jì)有所幫助。
相關(guān)文章
Kettle連接Oracle數(shù)據(jù)庫(kù)方法((Oracle19c&Oracle11g))
這篇文章主要介紹了Kettle連接Oracle數(shù)據(jù)庫(kù)方法((Oracle19c&Oracle11g)),包括oracle驅(qū)動(dòng)jar包,連接oracle的過程,思路很簡(jiǎn)單需要的朋友可以參考下2022-11-11
Oracle通過遞歸查詢父子兄弟節(jié)點(diǎn)方法示例
這篇文章主要給大家介紹了關(guān)于Oracle如何通過遞歸查詢父子兄弟節(jié)點(diǎn)的相關(guān)資料,遞歸查詢對(duì)各位程序員來說應(yīng)該都不陌生,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
Oracle中RegExp_Like正則表達(dá)式基本用法舉例
這篇文章主要給大家介紹了關(guān)于Oracle中RegExp_Like正則表達(dá)式基本用法的相關(guān)資料,REGEXP_LIKE(x,pattern)函數(shù)的功能類似于like運(yùn)算符,用于判斷源字符串是否匹配或包含指定模式的子串,需要的朋友可以參考下2024-02-02
Oracle中的Connect/session和process的區(qū)別及關(guān)系介紹
本文將詳細(xì)探討下Oracle中的Connect/session和process的區(qū)別及關(guān)系,感興趣的你可以參考下,希望可以幫助到你2013-03-03
Oracle數(shù)據(jù)庫(kù)安全策略分析(二)
Oracle數(shù)據(jù)庫(kù)安全策略分析(二)...2007-03-03
oracle 數(shù)據(jù)庫(kù)學(xué)習(xí) 基本結(jié)構(gòu)介紹
普及一下oracle的基礎(chǔ)知識(shí),總結(jié)一下,oracle 是由實(shí)例和數(shù)據(jù)庫(kù)組成2012-11-11
安裝Oracle完整客戶端后沒有訪問接口OraOLEDB.Oracle解決辦法
這篇文章主要給大家介紹了關(guān)于安裝Oracle完整客戶端后沒有訪問接口OraOLEDB.Oracle的解決辦法,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考解決價(jià)值,需要的朋友可以參考下2024-01-01
Oracle中行轉(zhuǎn)列與行轉(zhuǎn)列的實(shí)現(xiàn)方法
行轉(zhuǎn)列和列轉(zhuǎn)行是數(shù)據(jù)處理中常見的操作,可以將原始數(shù)據(jù)的行和列進(jìn)行轉(zhuǎn)換,以滿足特定的需求,本文給大家詳細(xì)介紹了Oracle中行轉(zhuǎn)列與行轉(zhuǎn)列的實(shí)現(xiàn)方法,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-07-07

