濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > oracle 存儲(chǔ)過(guò)程、函數(shù)和觸發(fā)器用法實(shí)例詳解

oracle 存儲(chǔ)過(guò)程、函數(shù)和觸發(fā)器用法實(shí)例詳解

熱門標(biāo)簽:鶴壁電話機(jī)器人價(jià)格 網(wǎng)貸外呼系統(tǒng)合法嗎 安陽(yáng)企業(yè)電銷機(jī)器人供應(yīng)商 電銷套路機(jī)器人 手機(jī)地圖標(biāo)注門店 杭州網(wǎng)絡(luò)外呼系統(tǒng)運(yùn)營(yíng)商 汽車4s店百度地圖標(biāo)注店 地圖標(biāo)注坐標(biāo)圖標(biāo) 地圖標(biāo)注效果的制作

本文實(shí)例講述了oracle 存儲(chǔ)過(guò)程、函數(shù)和觸發(fā)器用法。分享給大家供大家參考,具體如下:

一、存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)

指存儲(chǔ)在數(shù)據(jù)庫(kù)中供所有用戶程序調(diào)用的子程序叫存儲(chǔ)過(guò)程、存儲(chǔ)函數(shù)。

創(chuàng)建存儲(chǔ)過(guò)程

用CREATE PROCEDURE命令建立存儲(chǔ)過(guò)程。

語(yǔ)法:

create [or replace] procedure 過(guò)程名(參數(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ǔ)過(guò)程

--方法一
begin
addSal(7369);
end;
--方法二
exec addSal(7369);

存儲(chǔ)函數(shù)

函數(shù)為一命名的存儲(chǔ)程序,可帶參數(shù),并返回一計(jì)算值。函數(shù)和過(guò)程的結(jié)構(gòu)類似,但必須有一個(gè)return子句,用于返回函數(shù)值。函數(shù)說(shuō)明要指定函數(shù)名,結(jié)果值的類型,以及參數(shù)類型等。
創(chuàng)建語(yǔ)法:

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;

過(guò)程和函數(shù)中的IN和OUT

一般來(lái)講,過(guò)程和函數(shù)的區(qū)別在于函數(shù)可以有一個(gè)返回值,而過(guò)程沒(méi)有返回值。
但過(guò)程和函數(shù)都可以通過(guò)out指定一個(gè)或多個(gè)輸出參數(shù)。我們可以利用out參數(shù),在過(guò)程和函數(shù)中實(shí)現(xiàn)返回多個(gè)值。
什么時(shí)候用存儲(chǔ)過(guò)程或函數(shù)?
原則:如果只有一個(gè)返回值,用存儲(chǔ)函數(shù),否則,就用存儲(chǔ)過(guò)程。

創(chuàng)建包和包體

什么是包和包體?
包是一組相關(guān)過(guò)程、函數(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過(guò)程
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ì)有所幫助。

您可能感興趣的文章:
  • Oracle存儲(chǔ)過(guò)程基本語(yǔ)法介紹
  • Oracle 存儲(chǔ)過(guò)程總結(jié)(一、基本應(yīng)用)
  • Oracle中 關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的使用
  • 分解oracle存儲(chǔ)過(guò)程或函數(shù)調(diào)試過(guò)程步驟

標(biāo)簽:銀川 南陽(yáng) 焦作 河源 酒泉 梧州 柳州 泰安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《oracle 存儲(chǔ)過(guò)程、函數(shù)和觸發(fā)器用法實(shí)例詳解》,本文關(guān)鍵詞  oracle,存儲(chǔ),過(guò)程,函數(shù),和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《oracle 存儲(chǔ)過(guò)程、函數(shù)和觸發(fā)器用法實(shí)例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于oracle 存儲(chǔ)過(guò)程、函數(shù)和觸發(fā)器用法實(shí)例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    当涂县| 德安县| 延寿县| 新安县| 麻城市| 宜州市| 衡山县| 罗源县| 白沙| 丹棱县| 怀化市| 四会市| 沙田区| 天水市| 荆州市| 丽江市| 桐乡市| 云南省| 南和县| 惠东县| 长武县| 华亭县| 大邑县| 玉田县| 游戏| 阿合奇县| 滕州市| 芜湖市| 阿拉善右旗| 黄平县| 乌鲁木齐市| 嘉定区| 麻阳| 枝江市| 龙井市| 宁陕县| 郑州市| 阿勒泰市| 沭阳县| 洪江市| 甘泉县|