Oracle儲存過程 入門

2021-10-03 13:25:17 字數 4035 閱讀 7510

基於oracle資料庫儲存過程的建立及呼叫

一、plsql程式設計

二、儲存過程

在pl/sql developer(scott使用者)開啟乙個測試視窗:file–>new -->test window

plsql可分為三個部分:宣告部分(declare),可執行部分(begin-end),異常處理部分(不提及)

例項1:

-- created on 2019/3/5 by zzn-msi 

declare

-- local variables here

p_name varchar(20

);p_sal emp.sal%

type

; p_emp emp%rowtype;

begin

-- test statements here

p_name :=

'張三'

;select

2000

into p_sal from dual ;

select

*into p_emp from emp where ename =

'king';

dbms_output.put_line

('姓名:'

|| p_name ||

';工資:'

|| p_sal ||

|| p_emp.hiredate)

;end

;

變數宣告p_name varchar(20); (普通型變數)

p_sal emp.ename%type; (引用型變數:通過表名.列名%type指定變數的型別和長度)

p_emp emp%rowtype; (記錄型變數:通過表名%type 記錄表的一整行)

賦值

「 := 」 直接賦值

「select 2000 into p_sal from dual」 語句賦值:select 值 into 變數(from dual 是因為oracle資料庫select必須接from,dual為乙個無實際作用的表)

列印結果:dbms_output.put_line(); f8執行後可在dbms輸出視窗檢視結果:

例項2:

--分支

declare

--宣告記錄數變數

p_num number;

begin

--統計emp表中的記錄數並賦值給p_num

select

count(1

)into p_num from emp;

--判斷列印

if p_num >

20then

dbms_output.put_line(

'記錄數大於20條,為:'

|| p_num ||

'條;');

elsif p_num >

10then

dbms_output.put_line(

'記錄數小於20條,大於10條,為:'

|| p_num ||

'條;');

else

dbms_output.put_line(

'記錄數小於10條,為:'

|| p_num ||

'條;');

endif

;end

;

條件分支
-- loop迴圈

declare

-- 宣告計數器變數並賦值

n number :=1;

begin

loop

exit

when n >=10;

dbms_output.put_line(n);

n := n+1;

endloop

;end

;

loop迴圈loop…end loop (exit when 退出迴圈條件判斷,不支援n++)

什麼是游標

用於臨時儲存乙個查詢返回的多行資料,通過遍歷游標,逐行讀取處理該資料集

游標的使用方法:宣告—>開啟—>讀取—>關閉

例項:

declare

--宣告帶參游標

cursor p_cur(p_deptno emp.deptno%

type)is

select ename,sal from emp where deptno = p_deptno;

--定義變數用於接收游標的值

p_name emp.ename%

type

; p_sal emp.sal%

type

;begin

-- 開啟游標,並傳入引數

open p_cur(10)

;--遍歷游標

loop

--獲取游標中的資料

fetch p_cur into p_name, p_sal;

--當游標返回資料為空,退出迴圈

exit

when p_cur%notfound;

--列印資料

dbms_output.put_line(p_name ||

'---'

|| p_sal)

;end

loop

;end

;

語法游標宣告:cursor 游標名[(引數列表)] is 查詢語句;

開啟:open 游標名;

取值:fetch 游標名 into 變數列表;

關閉:close 游標名;

屬性

游標的屬性

返回值型別

說明%rowcount

整型獲得fetch返回的資料行數

%found

布林型最近的fetch語句返回資料不為空則值為真,否則為假

%notfound

布林型最近的fetch語句返回資料不為空則值為假,否則為真

%isopen

布林型游標已經開啟時值為真。否則為假

建立乙個procedure

name:儲存過程名

parameters:引數(語法:引數 in/out 型別,例如:i_empno in emp.empno%type, o_ename out emp.ename%type ;也可在程式中修改)

例項:

create

orreplace

procedure p_emp_out(i_empno in emp.empno%

type

, o_ename out emp.ename%

type)is

begin

select ename into o_ename from emp where empno = i_empno;

end p_emp_out;

編譯後會在procedures資料夾中生成乙個儲存過程,然後就可以在測試視窗中呼叫

呼叫儲存過程

declare

--定義變數接收儲存過程返回的資料

p_ename emp.ename%

type

;begin

--呼叫

p_emp_out(

7788

,p_ename)

;--列印

dbms_output.put_line(p_ename)

;end

;

oracle儲存過程入門

寫個簡單的儲存過程 選用scott的emp表。給員工漲工資,大於2000的漲50,大於1000的漲100,其他的漲150 create or replace procedure addsal employno varchar2 is increment number salary number be...

Oracle儲存過程入門

1.包中定義的儲存過程,必須在包體中實現 但包體中實現的儲存過程在包中可以不定義 2.儲存過程實現中,一旦有begin.end pro name 在begin與end之間必須有 塊。3.儲存過程實現中,如果過程沒有入參與出參列表,則直接寫過程名,沒有 4.在包頭與包體中宣告中包括以下幾種定義 包頭 ...

Oracle儲存過程入門

以前寫過一些儲存過程,不過現在都忘記了,前段時間又要處理一些負雜的資料,所以又自學了一遍儲存過程。首先我們需要了解一些基礎知識 引數型別 in 值傳遞,其作用就相當於常量,預設型別 out 相當於變數,在過程中返回乙個值通常到這個型別 in out 很明顯,就是兩個合起來,用於接受呼叫程式的值,並向...