基於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 很明顯,就是兩個合起來,用於接受呼叫程式的值,並向...