1. 程式人生 > >PLSQL中過程、函式、包、觸發器

PLSQL中過程、函式、包、觸發器

1.  過程
     過程用於執行特定的操作,當建立過程時,既可以指定輸入引數(in),也可以指定輸出引數(out), 通過在過程中使用輸入引數,可以將資料傳遞到執行部分;通過使用輸出引數,可以將執行部分的資料傳遞到應用環境。在sqlplus中可以使用create procedure命令來建立過程。 
例項如下: 
(1). 請考慮編寫一個過程,可以輸入僱員名,新工資,可修改僱員的工資 
(2). 如何呼叫過程有兩種方法; exec  call 
(3). 如何在Java程式中呼叫一個儲存過程
建立過程,程式碼如下:

  1. create procedure sp_pro3(spName varchar2, newSal number) 
    is
  2. --不要寫成number(3,2),表明型別就可以了,不需要大小。就好像Java寫方法時的引數一樣   
  3. Sql程式碼   
  4. begin    
  5.   --執行部分,根據使用者名稱去修改工資     
  6. update emp set sal=newSal where ename=spName;     
  7. end;     
  8. /    
  9. begin  
  10.   --執行部分,根據使用者名稱去修改工資  
  11. update emp set sal=newSal where ename=spName;  
  12. end;  

java程式中呼叫一個儲存過程 

  1. //演示java程式去呼叫<a href="http://lib.csdn.net/base/oracle" class='replace_word' title="Oracle知識庫" target='_blank' style='color:#df3434; font-weight:bold;'>Oracle</a>的儲存過程案例 
  2. Java程式碼   
  3. import java.sql.*;     
  4. publicclass TestOraclePro{     
  5.     publicstaticvoid main(String[] args){     
  6.         try{     
  7.             //1.載入驅動   
  8.             Class.forName("oracle.jdbc.driver.OracleDriver");     
  9.             //2.得到連線   
  10.             Connection ct = DriverManager.getConnection("jdbc:oracle:
    [email protected]
    :1521:MYORA1"
    ,"scott","m123");     
  11.             //3.建立CallableStatement   
  12.             CallableStatement cs = ct.prepareCall("{call sp_pro3(?,?)}");     
  13.             //4.給?賦值   
  14.             cs.setString(1,"SMITH");     
  15.             cs.setInt(2,10);     
  16.             //5.執行   
  17.             cs.execute();     
  18.             //關閉   
  19.             cs.close();     
  20.             ct.close();     
  21.         } catch(Exception e){     
  22.             e.printStackTrace();     
  23.         }     
  24.     }     
  25. }  

2.  函式
     函式用於返回特定的資料,當建立函式時,在函式頭部必須包含return子句。而在函式體內必須包含return語句返回的資料。我們可以使用create function來建立函式,實際案例:

  1. --輸入僱員的姓名,返回該僱員的年薪     
  2. create function annual_incomec(name varchar2)     
  3. return number is
  4. annual_salazy number(7,2);     
  5. begin    
  6.     --執行部分     
  7.     select sal*12+nvl(comm, 0) into annual_salazy from emp where ename=name;     
  8.     return annual_salazy;     
  9. end;     
  

      如果函式建立過程有編譯錯誤,可以使用show error;命令顯示錯誤 
     在sqlplus中呼叫函式 
     var income number   
     call annual_incomec('scott') into: income;   
     print income  
     var income number
     call annual_incomec('scott') into: income;
     print income
     同樣我們可以在java程式中呼叫該函式
     select annual_income('SCOTT') from dual; 
     這樣可以通過rs.getInt(l)得到返回的結果。

3.  包 
     包用於在邏輯上組合過程和函式,它由包規範和包體兩部分組成。 
(1). 我們可以使用create package命令來建立包。  
  包的規範只包含了過程和函式的說明,但是沒有過程和函式的實現程式碼。包體用於實現包規範中的過程和函式。 

  1. --建立一個包sp_package   
  2. --宣告該包有一個過程update_sal   
  3. --宣告該包有一個函式annual_income   
  4. Sql程式碼   
  5. create package sp_package is
  6.   procedure update_sal(name varchar2, newsal number);     
  7.   function annual_income(name varchar2) return number;     
  8. end;    
  9. create package sp_package is
  10.   procedure update_sal(name varchar2, newsal number);  
  11.   function annual_income(name varchar2) return number;  
  12. end;  

(2). 建立包體可以使用create package body命令 

  1. --給包sp_package實現包體    
  2. create or replace package body sp_package is
  3.   procedure update_sal(name varchar2, newsal number)      
  4.   is
  5.   begin      
  6.     update emp set sal = newsal where ename = name;     
  7.   end;     
  8.   function annual_income(name varchar2) return number is
  9.     annual_salary number;     
  10.   begin    
  11.     select sal * 12 + nvl(comm, 0) into annual_salary from emp     
  12.      where ename = name;     
  13.     return annual_salary;     
  14.   end;     
  15. end;     
  

(3). 如何呼叫包的過程或是函式 
      當呼叫包的過程或是函式時,在過程和函式前需要帶有包名,如果要訪問其它方案的包,還需要在包名前加方案名。 
      call sp_package.update_sal('SCOTT', 1500); 
4.  觸發器 
     觸發器是指隱含的執行的儲存過程。當定義觸發器時,必須要指定觸發的事件和觸發的操作,常用的觸發事件包括insert,update,delete語句,而觸發操作實際就是一個pl/sql塊。可以使用create trigger來建立觸發器。  
我們會在後面詳細為大家介紹觸發器的使用,因為觸發器是非常有用的,可維護資料庫的安全和一致性。

相關推薦

PLSQL過程函式觸發器

1.  過程     過程用於執行特定的操作,當建立過程時,既可以指定輸入引數(in),也可以指定輸出引數(out), 通過在過程中使用輸入引數,可以將資料傳遞到執行部分;通過使用輸出引數,可以將執行部分的資料傳遞到應用環境。在sqlplus中可以使用create proc

Python - 函式 - 閉裝飾器遞迴

目錄 一、閉包 - 內部函式包含,對外層作用域而非全域性作用域的引用 1-1 閉包的意義 - 優先使用自己外層包裹的作用域 二、裝飾器 - 閉包的一種應用方式 2-1 不使用裝飾器實現裝飾器的功能 - 使用閉包 2-2 無參裝飾器(@裝飾器名) 2-2-1

函式物件函式巢狀名稱空間與作用域函式裝飾器

一.函式物件 函式時第一類物件,函式可以當作資料傳遞 1.函式可以被引用 2.函式可以作為引數傳入 3.函式可以作為函式的返回值 4.函式可以作為容器型別的元素 二.函式巢狀 1.函式巢狀呼叫:在函式內又呼叫了其他函式 2.函式巢狀定義:在函式內又定義了其他函式(只能在其函式內部呼叫,在其函式

python之函式可迭代物件和迭代器

一、函式名的應用   # 1,函式名就是函式的記憶體地址,而函式名()則是執行這個函式。 def func(): return print(func) # 返回一個地址 # 2,函式名可以作為變數。 def func1():

js函式的三種定義方式函式宣告函式同名重複函式刪除

全棧工程師開發手冊 (作者:欒鵬) 在js中,函式本身屬於物件的一種,因此可以定義、賦值,作為物件的屬性或者成為其他函式的引數。函式名只是函式這個物件類的引用。 一、函式定義 【1】函式宣告語句 使用function關鍵字,後跟一組引數以及函

Oracle的時間函式用法(to_dateto_char)

一、24小時的形式顯示出來要用HH24 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; 二、

C++類成員函式的過載覆蓋和隱藏的區別,超清楚!

1.成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 2.覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同;

在eclipse建立maven專案匯出jar在windows伺服器上執行

一.在eclipse中建立maven專案 1>在eclipse的選單欄中:file -> new -> project -> maven project -> next ->next ->選擇 maven-arc

Python的分組函式(groupbyitertools)

from operator import itemgetter #itemgetter用來去dict中的key,省去了使用lambda函式 from itertools import groupby #itertool還包含有其他很多函式,比如將多個list聯合起來。。 d1={'name':'zhangsa

Jsarguments的使用函式自呼叫變數作用域函式作為引數傳入函式作為返回值

1,arguments是一個比較特別的物件,每個函式中都有一個arguments,它接收函式傳入的引數,以陣列的形式存放在 arguments,可遍歷 //1,需求:求任意數的最大值 function getMax(){ var Max = arguments

一個比較變態的js傳值,Query的bindajax閉上下文傳值

pre query dna input primary false function and indexof var getIDNameList = function (list, selected, text, btn, actionUrl, defaultKey,

3netty粘(二)

list ride int 簡化 iter getclass null message som 上篇博客留了個尾巴“而且LineBasedFrameDecoder據說還有一種不要求攜帶結束符的解碼方式”,今天就從源碼來看看是怎麽回事。 一、基本原理 如果沒有netty,

異常處理模塊時間模塊subprocess(調用shell命令)

模塊異常處理 捕捉異常可以使用try/except語句。try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。如果你不想在異常發生時結束你的程序,只需在try裏捕獲它。 更多的異常關鍵字:http://www.runoob.com/python/python-exce

開啟運維之路之第 3 篇——目錄作用介紹檔案搜尋其它命令解壓縮使用者管理

1、目錄作用介紹 我們先切換到系統根目錄 / 看看根目錄下有哪些目錄 [[email protected] ~]# cd / [[email protected] /]# ls 說明: 根目錄下的bin和sbin,usr目錄下的bin和sbin,這四

JavaScript的函式(定義與解析匿名函式函式傳參return關鍵字)和陣列(操作資料的方法多維陣列陣列去重)

函式 函式就是重複執行的程式碼片。 1、函式定義與執行 <script type="text/javascript"> // 函式定義 function aa(){ alert('hello!'); } // 函式執行

idea一些好用的配置(eclipse快捷鍵自動導提示不區分大小寫)

讓idea的快捷鍵使用eclipse的快捷鍵 ctrl+alt+s --> Keymap --> 選擇Eclipse 注意:換成eclipse快捷鍵之後可以再設定如下的idea提示快捷鍵   alt+/ idea引數提示: ide

Java學習筆記 第4天~函式的定義函式的特點函式的過載陣列

函式的定義 就是定義在類中的具有特定功能的獨立一段小程式(函式也稱之為方法) int c=add(3,4); System.out.println("c"+c); public static int add(int a,int b) { returna+b; } /* 修飾符

Python函式的定義匿名函式函式的引數函式呼叫引數傳遞變數作用域遞迴呼叫

Python函式: 函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。 Python提供了許多內建函式,比如print()。你也可以自己建立函式,這被叫做使用者自定義函式。 定義函式: 在Python中,定義一個函式要使用def語句,依次寫出函式名、

Java之eclipse將工具類打成Jar使用jar以及刪除jar

Eclipse如何匯出jar包??? 選中對應的工具類,右鍵==>Export... ==>選中Java目錄下的JAR File==>Next==>選擇匯出路徑==>Fi

PowerDesigner 16.5.0.3982漢化破解版安裝教程(含安裝檔案漢化破解檔案)

目錄 一、軟體下載 二、軟體安裝 三、軟體破解 四、軟體漢化 一、軟體下載 1.下載地址(不用複製,直接點選下載連結即可):連結:https://pan.baidu.com/s/1cNBoCAxR2uZTnI0D8VdyoA 密碼:7ntd 2.失效請留言,會及時補上 二、軟