自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle存儲過程和自定義函數(shù)

存儲 存儲軟件
存儲過程和存儲函數(shù)是指存儲在數(shù)據(jù)庫中供所有用戶程序調(diào)用的子程序叫存儲過程、存儲函數(shù)。異同點:存儲過程和存儲函數(shù)的相同點:完成特定功能的程序。存儲過程和存儲函數(shù)的區(qū)別:是否用return語句返回值。

概述

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

異同點: 

  • 存儲過程和存儲函數(shù)的相同點:完成特定功能的程序。
  • 存儲過程和存儲函數(shù)的區(qū)別:是否用return語句返回值。

存儲過程的創(chuàng)建和調(diào)用

***個存儲過程: 打印hello world

  1. createorreplace procedure sayhelloword 
  2. as 
  3.  --說明部分,as一定要寫 
  4. begin 
  5.    dbms_output.put_line('Hello World'); 
  6. end

[[222712]]

調(diào)用存儲過程

1.execsayhelloworld()

2.2

  1. -- 調(diào)用兩次 
  2. begin 
  3.    sayhelloworld(); 
  4.    sayhelloworld(); 
  5. end

oracle 帶參數(shù)的存儲過程

  1. --創(chuàng)建一個帶參數(shù)的存儲過程 
  2. --給指定的員工漲100塊錢的工資,并且打印漲前后漲后的薪水 
  3. createorreplace procedure raisesalary(enoinnumber)--in這是一個輸入?yún)?shù) 
  4. as 
  5.  --定義一個變量保存漲前的薪水 
  6.    psal emp.sal%type; 
  7. begin 
  8.  --得到員工漲前的薪水 
  9.    selectsalintopsalfromempwhereempno=eno; 
  10.  --給該員工漲100塊錢 
  11.    update emp setsal=sal+100whereempno=eno; 
  12.  --一般,這里不需要commit!也不需要rollback 
  13.  --注意:一般不在存儲過程或者存儲函數(shù)中,commit和rollback 
  14.  --打印 
  15.    dbms_output.put_line('漲前:'||psal||',漲后:'||(psal+100)); 
  16. end
  17. --調(diào)用: 
  18. begin 
  19.   raisesalary(7839); 
  20.   raisesalary(7566); 
  21. end

如何調(diào)試存儲過程

  1. 調(diào)試存儲過程***放到Oracle數(shù)據(jù)庫所在的系統(tǒng)或虛擬機上,解壓SQL developer ,雙擊運行。
  2. 為了確保存儲過程或函數(shù)是可調(diào)試的,右鍵“以編譯并進行調(diào)試”,點擊紅色按鈕“調(diào)試”
  3. 利用已寫好的調(diào)用函數(shù)進行調(diào)試。
  4. 給調(diào)試賬戶授權
  1. grant DEBUG CONNECT SESSION ,DEBUG ANY PROCEDURE to scott; 

存儲函數(shù)

函數(shù)的定義

  是一個命名的存儲程序,可帶參數(shù),并返回一個計算值。必須有return 子句,用于返回函數(shù)值。

創(chuàng)建存儲函數(shù)語法

  1.  create or replace function 函數(shù)名(參數(shù)列表) 
  2.   return 函數(shù)值類型 
  3.   as 
  4.   begin 
  5.     PLSQL子程序體; 
  6.   end
  7. ​ 

注意 表達式中某個字段為空時,表達式返回值為空。為防止含有表達式的返回值錯誤,在可能為空的字段上加上NVL(字段名,0)。

--查詢某個員工的年收入

  1. --查詢某個員工的年收入 
  2. create or replace function queryemp_income(eno in number) 
  3. return number 
  4. as  
  5.     --定義變量接收薪水和獎金 
  6.     p_sal emp.sal%type; 
  7.     p_comm emp.comm%type; 
  8. begin 
  9.   select sal,comm into p_sal,p_comm from emp where empno=eno; 
  10.   --nvl為遇空函數(shù),如果p_comm為空則返回0 
  11.   return nvl(p_comm,0)+p_sal*12; 
  12. end
  13. ​ 

out 參數(shù)

存儲過程和存儲函數(shù)都可以有多個輸入(in)和輸出參數(shù)(out),都可以通過out參數(shù)實現(xiàn)返回多個值。

  1. -- out參數(shù):查詢某個員工姓名、月薪和職位 
  2. -- 原則: 如果只有一個返回值,用存儲函數(shù);否則,就用存儲過程。 
  3. create or replace procedure queryempinfor(eno in number,pename out varchar2, 
  4.   psal out number,pjob out varchar2) 
  5. as  
  6. begin 
  7.    -- 得到該員工的姓名、月薪和職位 
  8.     select ename,sal,empjob into pename,psal,pjob from emp where empno=eno; 
  9. end
  10. ​ 

在 out 參數(shù)中訪問光標

申明包結構

  • 包頭(申明)
  • 包體(實現(xiàn))

案例

  1. -- 查詢某個部門中所有員工的所有信息  //ref(reference引用) cursor(光標) 
  2. #包頭 
  3. create or replace package mypackage as 
  4. type empcursor is ref cursor
  5. procedure queryEmpList(dno in number,empList out empcursor); 
  6. end mypackage; 
  7. #包體 
  8. create or replace package body mypackage as 
  9. procedure queryEmpList(dno in number,empList out empcursor) as 
  10.  begin 
  11.    open empList for select * from emp where deptno=dno; 
  12.  end queryEmpList; 
  13. end mypackage; 
  14. ***********包體需要實現(xiàn)包頭中聲明的所有方法********************* 
  15. ​ 

在應用程序中訪問

在java應用程序中訪問存儲過程和存儲函數(shù)以及訪問包下的存儲過程,可以查看java API文檔。

 

責任編輯:武曉燕 來源: 序猿不姓程
相關推薦

2010-09-06 15:41:34

SQL函數(shù)存儲過程

2010-10-25 16:05:07

oracle自定義函數(shù)

2010-04-28 12:33:36

Oracle自定義函數(shù)

2011-05-17 13:32:04

oracle

2010-09-14 16:47:23

SQL自定義函數(shù)

2010-09-14 16:59:39

SQL自定義函數(shù)

2010-10-25 13:48:26

Oracle過程

2009-07-06 16:20:50

JSP自定義標簽

2010-05-11 13:16:21

Unix awk

2023-02-28 11:29:09

存儲函數(shù)MySQL

2015-02-12 15:33:43

微信SDK

2011-07-04 14:08:02

C++

2017-03-16 14:37:05

LinuxShell函數(shù)

2010-09-09 09:49:18

SQL函數(shù)存儲過程

2015-02-12 15:38:26

微信SDK

2010-11-29 11:27:08

oracle創(chuàng)建存儲過

2023-06-28 08:05:46

場景vue3自定義

2010-04-16 10:11:20

Oracle存儲過程

2010-11-19 11:32:25

Oracle存儲過程

2021-07-15 16:41:21

Swift查詢函數(shù)
點贊
收藏

51CTO技術棧公眾號