Java知識分享網 - 輕松學習從此開始!????

Java知識分享網

Java1234官方群24:java1234官方群24
Java1234官方群24:791563025
     

Mycat實現mysql高可用集群視頻教程免費領取

畢設代做,包查重聯系人QQ:1982956321畢設大神

領取國內優秀就業,加薪,跳槽項目課程源碼-vue2+jwt+springboot+mybaits前后端分離通訊錄系統課程

SpringBoot打造企業級進銷存

Java1234 VIP課程

領取微信掃碼登錄Java實現視頻教程

Java1234至尊VIP(特價活動)

oracle存儲過程總結文檔 PDF 下載


分享到:
時間:2020-03-29 20:45來源:http://www.luygg.com 作者:小鋒  侵權舉報
oracle存儲過程總結文檔 PDF 下載
失效鏈接處理
oracle存儲過程總結文檔 PDF 下載

下載地址:

提取碼:97x5

相關截圖:


主要內容:

Oracle 存儲過程總結(一、基本應用)
作者: 字體:[增加 減小] 類型:轉載
Oracle 存儲過程總結 基本應用技巧,大家可以學習下oracle存儲過程最基本的東西。
 
1、創建存儲過程 
create or replace procedure test(var_name_1 in type,var_name_2 out type) as 
--聲明變量(變量名 變量類型) 
begin 
--存儲過程的執行體 
end test; 
打印出輸入的時間信息 
E.g: 
create or replace procedure test(workDate in Date) is 
begin 
dbms_output.putline('The input date is:'||to_date(workDate,'yyyy-mm-dd')); 
end test; 
2、變量賦值 
變量名 := 值; 
E.g: 
create or replace procedure test(workDate in Date) is 
x number(4,2); 
begin 
x := 1; 
end test; 
3、判斷語句: 
if 比較式 then begin end; end if; 
E.g 
create or replace procedure test(x in number) is 
begin 
if x >0 then 
begin 
x := 0 - x; 
end; 
end if; 
if x = 0 then 
begin 
x: = 1; 
end; 
end if; 
end test; 
4、For 循環 For ... in ... LOOP 
--執行語句 
end LOOP; 
(1)循環遍歷游標 
create or replace procedure test() as 
Cursor cursor is select name from student; name varchar(20); 
begin 
for name in cursor LOOP 
begin 
dbms_output.putline(name); 
end; 
end LOOP; 
end test; 
(2)循環遍歷數組 
create or replace procedure test(varArray in myPackage.TestArray) as 
--(輸入參數varArray 是自定義的數組類型,定義方式見標題6) 
i number; 
begin 
i := 1; --存儲過程數組是起始位置是從1開始的,與java、C、C++等語言不同。因為在Oracle中本是沒有數組的概念的,數組其實就是一張 
--表(Table),每個數組元素就是表中的一個記錄,所以遍歷數組時就相當于從表中的第一條記錄開始遍歷 
for i in 1..varArray.count LOOP 
dbms_output.putline('The No.'|| i || 'record in varArray is:'||varArray(i)); 
end LOOP; 
end test; 
5、While 循環 
while 條件語句 LOOP 
begin 
end; 
end LOOP; 
E.g 
create or replace procedure test(i in number) as 
begin 
while i < 10 LOOP 
begin 
i:= i + 1; 
end; 
end LOOP; 
end test; 
6、數組 首先明確一個概念:Oracle中本是沒有數組的概念的,數組其實就是一張表(Table),每個數組元素就是表中的一個記錄。 
使用數組時,用戶可以使用Oracle已經定義好的數組類型,或可根據自己的需要定義數組類型。 
(1)使用Oracle自帶的數組類型 
x array; --使用時需要需要進行初始化 
e.g: 
create or replace procedure test(y out array) is 
x array; 
begin 
x := new array(); 
y := x; 
end test; 
(2)自定義的數組類型 (自定義數據類型時,建議通過創建Package的方式實現,以便于管理) 
E.g (自定義使用參見標題4.2) create or replace package myPackage is 
-- Public type declarations type info is record( name varchar(20), y number); 
type TestArray is table of info index by binary_integer; --此處聲明了一個TestArray的類型數據,其實其為一張存儲Info數據類型的Table而已,及TestArray 就是一張表,有兩個字段,一個是 
name,一個是y。需要注意的是此處使用了Index by binary_integer 編制該Table的索引項,也可以不寫,直接寫成:type TestArray is 
table of info,如果不寫的話使用數組時就需要進行初始化:varArray myPackage.TestArray; varArray := new myPackage.TestArray(); 
end TestArray; 
7.游標的使用 Oracle中Cursor是非常有用的,用于遍歷臨時表中的查詢結果。其相關方法和屬性也很多,現僅就常用的用法做一二介紹: 
(1)Cursor型游標(不能用于參數傳遞) 
create or replace procedure test() is 
cusor_1 Cursor is select std_name from student where ...; --Cursor的使用方式1 cursor_2 Cursor; 
begin 
select class_name into cursor_2 from class where ...; --Cursor的使用方式2 
可使用For x in cursor LOOP .... end LOOP; 來實現對Cursor的遍歷 
end test; 
(2)SYS_REFCURSOR型游標,該游標是Oracle以預先定義的游標,可作出參數進行傳遞 
create or replace procedure test(rsCursor out SYS_REFCURSOR) is 
cursor SYS_REFCURSOR; name varhcar(20); 
begin 
OPEN cursor FOR select name from student where ... --SYS_REFCURSOR只能通過OPEN方法來打開和賦值 
LOOP 
fetch cursor into name --SYS_REFCURSOR只能通過fetch into來打開和遍歷 exit when cursor%NOTFOUND; --SYS_REFCURSOR中可使用三個狀態屬性: ---%NOTFOUND(未找到記錄信息) %FOUND(找到記錄信息) ---%ROWCOUNT(然后當前游標所指向的行位置) 
dbms_output.putline(name); 
end LOOP; 
rsCursor := cursor; 
end test; 
下面寫一個簡單的例子來對以上所說的存儲過程的用法做一個應用: 
現假設存在兩張表,一張是學生成績表(studnet),字段為:stdId,math,article,language,music,sport,total,average,step 一張是學生課外成績表(out_school),字段為:stdId,parctice,comment 
通過存儲過程自動計算出每位學生的總成績和平均成績,同時,如果學生在課外課程中獲得的評價為A,就在總成績上加20分。 
create or replace procedure autocomputer(step in number) is 
rsCursor SYS_REFCURSOR; 
commentArray myPackage.myArray; 
math number; 
article number; 
language number; 
music number; 
sport number; 
total number; 
average number; 
stdId varchar(30); 
record myPackage.stdInfo; 
i number; 
begin 
i := 1; 
get_comment(commentArray); --調用名為get_comment()的存儲過程獲取學生課外評分信息 
OPEN rsCursor for select stdId,math,article,language,music,sport from student t where t.step = step; 
LOOP 
fetch rsCursor into stdId,math,article,language,music,sport; exit when rsCursor%NOTFOUND; 
total := math + article + language + music + sport; 
for i in 1..commentArray.count LOOP 
record := commentArray(i); 
if stdId = record.stdId then 
begin 
if record.comment = 'A' then 
begin 
total := total + 20; 
go to next; --使用go to跳出for循環 
end; 
end if; 
end; 
end if; 
end LOOP; 
<<continue>> average := total / 5; 
update student t set t.total=total and t.average = average where t.stdId = stdId; 
end LOOP; 
end; 
end autocomputer; 
--取得學生評論信息的存儲過程 
create or replace procedure get_comment(commentArray out myPackage.myArray) is 
rs SYS_REFCURSOR; 
record myPackage.stdInfo; 
stdId varchar(30); 
comment varchar(1); 
i number; 
begin 
open rs for select stdId,comment from out_school 
i := 1; 
LOOP 
fetch rs into stdId,comment; exit when rs%NOTFOUND; 
record.stdId := stdId; 
record.comment := comment; 
recommentArray(i) := record; 
i:=i + 1; 
end LOOP; 
end get_comment; 
--定義數組類型myArray 
create or replace package myPackage is begin 
type stdInfo is record(stdId varchar(30),comment varchar(1)); 
type myArray is table of stdInfo index by binary_integer; 
end myPackage;
 
 
Oracle 存儲過程總結 二、字符串處理相關函數
作者: 字體:[增加 減小] 類型:轉載
項目中有涉及存儲過程對字符串的處理,所以就將在網上查找到的資料匯總,做一個信息拼接式的總結。
 
以下信息均來自互聯網,貼出來一則自己保存以待以后使用,一則供大家分享。 
字符函數——返回字符值 
這些函數全都接收的是字符族類型的參數(CHR除外)并且返回字符值. 
除了特別說明的之外,這些函數大部分返回VARCHAR2類型的數值. 
字符函數的返回類型所受的限制和基本數據庫類型所受的限制是相同的。 
字符型變量存儲的最大值: 
VARCHAR2數值被限制為2000字符(ORACLE 8中為4000字符) 
CHAR數值被限制為255字符(在ORACLE8中是2000) 
long類型為2GB 
Clob類型為4GB 
1、CHR 語法: chr(x) 
功能:返回在數據庫字符集中與X擁有等價數值的字符。CHR和ASCII是一對反函數。經過CHR轉換后的字符再經過ASCII轉換又得到了原來的字 
符。 
使用位置:過程性語句和SQL語句。 
2、CONCAT 
語法: CONCAT(string1,string2) 
功能:返回string1,并且在后面連接string2。 
使用位置:過程性語句和SQL語句。 
3、INITCAP 
語法:INITCAP(string) 
功能:返回字符串的每個單詞的第一個字母大寫而單詞中的其他字母小寫的string。單詞是用.空格或給字母數字字符進行分隔。不是字母的 
字符不變動。 
使用位置:過程性語句和SQL語句。 
4、LTRIM 
語法:LTRIM(string1,string2) 
功能:返回刪除從左邊算起出現在string2中的字符的string1。String2被缺省設置為單個的空格。數據庫將掃描string1,從最左邊開始。當 
遇到不在string2中的第一個字符,結果就被返回了。LTRIM的行為方式與RTRIM很相似。 
使用位置:過程性語句和SQL語句。 
5、NLS_INITCAP 語法:NLS_INITCAP(string[,nlsparams]) 
功能:返回字符串每個單詞第一個字母大寫而單詞中的其他字母小寫的string,nlsparams 
指定了不同于該會話缺省值的不同排序序列。如果不指定參數,則功能和INITCAP相同。Nlsparams可以使用的形式是: 
‘NLS_SORT=sort' 
這里sort制訂了一個語言排序序列。 
使用位置:過程性語句和SQL語句。 
6、NLS_LOWER 
語法:NLS_LOWER(string[,nlsparams]) 
功能:返回字符串中的所有字母都是小寫形式的string。不是字母的字符不變。 
Nlsparams參數的形式與用途和NLS_INITCAP中的nlsparams參數是相同的。如果nlsparams沒有被包含,那么NLS_LOWER所作的處理和 
LOWER相同。 
使用位置;過程性語句和SQL語句。 
7、NLS_UPPER 語法:nls_upper(string[,nlsparams]) 
功能:返回字符串中的所有字母都是大寫的形式的string。不是字母的字符不變。nlsparams參數的形式與用途和NLS_INITCAP中的相同。如果 
沒有設定參數,則NLS_UPPER功能和UPPER相同。 
使用位置:過程性語句和SQL語句。 
8、REPLACE 
語法:REPLACE(string,search_str[,replace_str]) 
功能:把string中的所有的子字符串search_str用可選的replace_str替換,如果沒有指定replace_str,所有的string中的子字符串 
search_str都將被刪除。REPLACE是TRANSLATE所提供的功能的一個子集。 
使用位置:過程性語句和SQL語句。 
9、RPAD 
語法:RPAD(string1,x[,string2]) 
功能:返回在X字符長度的位置上插入一個string2中的字符的string1。如果string2的長度要比X字符少,就按照需要進行復制。如果string2 
多于X字符,則僅string1前面的X各字符被使用。如果沒有指定string2,那么使用空格進行填充。X是使用顯示長度可以比字符串的實際長度 
要長。RPAD的行為方式與LPAD很相似,除了它是在右邊而不是在左邊進行填充。 
使用位置:過程性語句和SQL語句。 
10、RTRIM 
語法: RTRIM(string1,[,string2]) 
功能: 返回刪除從右邊算起出現在string1中出現的字符string2. string2被缺省設置為單個的空格.數據庫將掃描string1,從右邊開始.當遇 
到不在string2中的第一個字符,結果就被返回了RTRIM的行為方式與LTRIM很相似. 
使用位置:過程性語句和SQL語句。 
11、SOUNDEX 
語法: SOUNDEX(string) 
功能: 返回string的聲音表示形式.這對于比較兩個拼寫不同但是發音類似的單詞而言很有幫助. 
使用位置:過程性語句和SQL語句。 
12、SUBSTR 語法: SUBSTR(string,a[,b]) 
功能: 返回從字母為值a開始b個字符長的string的一個子字符串.如果a是0,那么它就被認為從第一個字符開始.如果是正數,返回字符是從左 
邊向右邊進行計算的.如果b是負數,那么返回的字符是從string的末尾開始從右向左進行計算的.如果b不存在,那么它將缺省的設置為整個字符 
串.如果b小于1,那么將返回NULL.如果a或b使用了浮點數,那么該數值將在處理進行以前首先被卻為一個整數. 
使用位置:過程性語句和SQL語句。 
13、TRANSLATE 語法: TRANSLATE(string,from_str,to_str) 
功能: 返回將所出現的from_str中的每個字符替換為to_str中的相應字符以后的string. TRANSLATE是REPLACE所提供的功能的一個超集. 
如果from_str比to_str長,那么在from_str中而不在to_str中而外的字符將從string中被刪除,因為它們沒有相應的替換字符. to_str不能為空 
.Oracle把空字符串認為是NULL,并且如果TRANSLATE中的任何參數為NULL,那么結果也是NULL. 
使用位置:過程性語句和SQL語句。 
14、UPPER 
語法: UPPER(string) 
功能: 返回大寫的string.不是字母的字符不變.如果string是CHAR數據類型的,那么結果也是CHAR類型的.如果string是VARCHAR2類型的,那么 
結果也是VARCHAR2類型的. 
使用位置: 過程性語句和SQL語句。 
字符函數——返回數字 
這些函數接受字符參數回數字結果.參數可以是CHAR或者是VARCHAR2類型的.盡管實際下許多結果都是整數值,但是返回結果都是簡單的NUMBER 
類型的,沒有定義任何的精度或刻度范圍. 
16、ASCII 
語法: ASCII(string) 
功能: 數據庫字符集返回string的第一個字節的十進制表示.請注意該函數仍然稱作為ASCII.盡管許多字符集不是7位ASCII.CHR和ASCII是互為 
相反的函數.CHR得到給定字符編碼的響應字符. ASCII得到給定字符的字符編碼. 
使用位置: 過程性語句和SQL語句。 
17、INSTR 
語法: INSTR(string1, string2[a,b]) 
功能: 得到在string1中包含string2的位置. string1時從左邊開始檢查的,開始的位置為a,如果a是一個負數,那么string1是從右邊開始進行 
掃描的.第b次出現的位置將被返回. a和b都缺省設置為1,這將會返回在string1中第一次出現string2的位置.如果string2在a和b的規定下沒有 
找到,那么返回0.位置的計算是相對于string1的開始位置的,不管a和b的取值是多少. 
使用位置: 過程性語句和SQL語句。 
18、INSTRB 
語法: INSTRB(string1, string2[a,[b]]) 
功能: 和INSTR相同,只是操作的對參數字符使用的位置的是字節. 
使用位置: 過程性語句和SQL語句。 
19、LENGTH 
語法: LENGTH(string) 
功能: 返回string的字節單位的長度.CHAR數值是填充空格類型的,如果string由數據類型CHAR,它的結尾的空格都被計算到字符串長度中間. 
如果string是NULL,返回結果是NULL,而不是0. 
使用位置: 過程性語句和SQL語句。 
20、LENGTHB 語法: LENGTHB(string) 
功能: 返回以字節為單位的string的長度.對于單字節字符集LENGTHB和LENGTH是一樣的. 
使用位置: 過程性語句和SQL語句。 
21、NLSSORT 
語法: NLSSORT(string[,nlsparams]) 
功能: 得到用于排序string的字符串字節.所有的數值都被轉換為字節字符串,這樣在不同數據庫之間就保持了一致性. Nlsparams的作用和 
NLS_INITCAP中的相同.如果忽略參數,會話使用缺省排序. 
使用位置: 過程性語句和SQL語句。

 

------分隔線----------------------------
鋒哥公眾號


鋒哥微信號


日本色在线