




已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Oracle中存儲(chǔ)過(guò)程的介紹,PL/SQL簡(jiǎn)介(過(guò)程化SQL語(yǔ)言),PL/SQL是Oracle在標(biāo)準(zhǔn)SQL語(yǔ)言上的過(guò)程性擴(kuò)展。 不僅允許嵌入SQL語(yǔ)句,而且允許定義變量和常量,允許過(guò)程語(yǔ)言結(jié)構(gòu)(條件分支語(yǔ)句和循環(huán)語(yǔ)句),允許使用例外處理Oracle錯(cuò)誤。 PL/SQL最主要的功能是提供了一種服務(wù)器端的存儲(chǔ)過(guò)程語(yǔ)言,安全、強(qiáng)健、易于使用。,使用PL/SQL塊的優(yōu)點(diǎn),對(duì)于一般的數(shù)據(jù)庫(kù)(如SQL SERVER、DB2等),當(dāng)應(yīng)用程序訪問(wèn)RDBMS時(shí),每次只能發(fā)送單條SQL語(yǔ)句。執(zhí)行4條SQL語(yǔ)句需要在網(wǎng)絡(luò)上發(fā)送4次語(yǔ)句。 對(duì)于Oracle數(shù)據(jù)庫(kù)來(lái)說(shuō),通過(guò)使用PL/SQL塊,可以將多條SQL語(yǔ)句組織到同一個(gè)PL/SQL塊中,從而降低網(wǎng)絡(luò)開(kāi)銷(xiāo),提高應(yīng)用程序性能。,存儲(chǔ)過(guò)程(Procedure),存儲(chǔ)過(guò)程是Oracle數(shù)據(jù)庫(kù)的一種對(duì)象,是一種帶名的PL/SQL過(guò)程程序塊,是能完成一定操作的一組SQL語(yǔ)句,它在創(chuàng)建后,以編譯了的形式存儲(chǔ)在數(shù)據(jù)庫(kù)中,可以被有權(quán)用戶在任何需要的地方調(diào)用。 通過(guò)使用過(guò)程,不僅可以簡(jiǎn)化客戶端應(yīng)用程序的開(kāi)發(fā)和維護(hù),而且可以提高應(yīng)用程序的運(yùn)行性能。(假如某應(yīng)用程序需要經(jīng)常向某張表中插入數(shù)據(jù),并且在插入數(shù)據(jù)時(shí)需要對(duì)數(shù)據(jù)進(jìn)行檢查驗(yàn)證,為了簡(jiǎn)化客戶端的維護(hù),可以使用存儲(chǔ)過(guò)程),在項(xiàng)目開(kāi)發(fā)中使用存儲(chǔ)過(guò)程的好處,如果我們通過(guò)創(chuàng)建存儲(chǔ)過(guò)程以及程序中調(diào)用存儲(chǔ)過(guò)程,就可以避免將SQL語(yǔ)句同JSP代碼混雜在一起 第一,大大提高效率。存儲(chǔ)過(guò)程本身的執(zhí)行速度很快,而且,調(diào)用存儲(chǔ)過(guò)程可以大大減少同數(shù)據(jù)庫(kù)的交互次數(shù),減少網(wǎng)絡(luò)開(kāi)銷(xiāo)。 第二,提高安全性。假如將SQL語(yǔ)句混合在JSP代碼中,一旦代碼失密,同時(shí)也就意味著數(shù)據(jù)庫(kù)結(jié)構(gòu)失密。 第三,有利于SQL語(yǔ)句的重用。,建立存儲(chǔ)過(guò)程,CREATE OR REPLACE PROCEDURE Procedure_name (argument1 mode1 datatype1,argument2 mode2 datatype2,) IS AS PL/SQL BLOCK;,調(diào)用存儲(chǔ)過(guò)程,在Oracle的SQL*PLUS中調(diào)用過(guò)程時(shí),需要使用CALL或EXECUTE命令。 在PL/SQL塊中存儲(chǔ)過(guò)程可以直接引用。,過(guò)程參數(shù),建立過(guò)程時(shí),既可以指定過(guò)程參數(shù),也可以不提供任何參數(shù)。 過(guò)程參數(shù)包括輸入?yún)?shù)、輸出參數(shù)和輸入輸出參數(shù)3種類(lèi)型。 輸入?yún)?shù)(IN)接收調(diào)用環(huán)境的輸入數(shù)據(jù);輸出參數(shù)(OUT)用于將輸出數(shù)據(jù)傳遞到調(diào)用環(huán)境;輸入輸出參數(shù)(IN OUT)不僅接收輸入數(shù)據(jù),而且輸出數(shù)據(jù)到調(diào)用環(huán)境。,無(wú)參數(shù)的過(guò)程,帶輸入?yún)?shù)的過(guò)程(IN關(guān)鍵字,默認(rèn)參數(shù)模式是輸入?yún)?shù))需要為輸入?yún)?shù)提供數(shù)據(jù)值。,帶輸出參數(shù)的過(guò)程(OUT 關(guān)鍵字,需要使用變量接收輸出參數(shù)的數(shù)據(jù)值),帶輸入輸出參數(shù)(IN OUT)在調(diào)用之前需要定義變量輸入值,調(diào)用結(jié)束之后使用變量輸出數(shù)據(jù)。,存儲(chǔ)過(guò)程中可以使用異常處理,JAVA中調(diào)用Oracle存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程(僅輸入?yún)?shù))為: CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2); END TESTA;,package com.hyq.src; import java.sql.*; import java.sql.ResultSet; public class TestProcedureOne public TestProcedureOne() public static void main(String args ) String driver = “oracle.jdbc.driver.OracleDriver“; String strUrl = “jdbc:oracle:thin:127.0.0.1:1521: hyq “; Statement stmt = null; ResultSet rs = null; Connection conn = null; CallableStatement cstmt = null; try Class.forName(driver); conn = DriverManager.getConnection(strUrl, “ hyq “, “ hyq “); CallableStatement proc = null; proc = conn.prepareCall(“ call HYQ.TESTA(?,?) “); proc.setString(1, “100“); proc.setString(2, “TestOne“); proc.execute(); catch (SQLException ex2) ex2.printStackTrace(); catch (Exception ex2) ex2.printStackTrace(); ,finally try if(rs != null) rs.close(); if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); catch (SQLException ex1) ,帶返回值的存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程為: CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS BEGIN SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1; END TESTB;,package com.hyq.src; public class TestProcedureTWO public TestProcedureTWO() public static void main(String args ) String driver = “oracle.jdbc.driver.OracleDriver“; String strUrl = “jdbc:oracle:thin:127.0.0.1:1521:hyq“; Statement stmt = null; ResultSet rs = null; Connection conn = null; try Class.forName(driver); conn = DriverManager.getConnection(strUrl, “ hyq “, “ hyq “); CallableStatement proc = null; proc = conn.prepareCall(“ call HYQ.TESTB(?,?) “); proc.setString(1, “100“); proc.registerOutParameter(2, Types.VARCHAR); proc.execute(); String testPrint = proc.getString(2); System.out.println(“=testPrint=is=“+testPrint); catch (SQLException ex2) ex2.printStackTrace(); catch (Exception ex2) ex2.printStackTrace(); ,finally try if(rs != null) rs.close(); if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); catch (SQLException ex1) ,返回結(jié)果集:需要定義游標(biāo)(類(lèi)似于指針)作為輸出參數(shù),并且要用到Oracle中包(package)的概念,1.包頭(負(fù)責(zé)定義): CREATE OR REPLACE PACKAGE TESTPACKAGE AS TYPE Test_CURSOR IS REF CURSOR;-定義游標(biāo)變量 PROCEDURE TESTC(p_CURSOR OUT Test_CURSOR)-定義過(guò)程,使用游標(biāo)作為輸出參數(shù) end TESTPACKAGE; 2.包體(具體實(shí)現(xiàn)) CREATE OR REPLACE PACKAGE BODY TESTPACKAGE IS PROCEDURE TESTC(p_CURSOR OUT Test_CURSOR) AS BEGIN OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB; END TESTC; END TESTPACKAGE;,try Class.forName(driver); conn = DriverManager.getConnection(strUrl, “hyq“, “hyq“); CallableStatement proc = null; proc = conn.prepareCall(“ call hyq.testc(?) “); p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 武漢體育學(xué)院體育科技學(xué)院《食用真菌學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西省朔州市懷仁市重點(diǎn)中學(xué)2025屆高三下學(xué)期聯(lián)合物理試題含解析
- 認(rèn)識(shí)新規(guī)范 爭(zhēng)做文明人
- 2025商業(yè)店鋪?zhàn)赓U保證金合同樣本
- 2025農(nóng)產(chǎn)品買(mǎi)賣(mài)合同
- 2025標(biāo)的物買(mǎi)賣(mài)合同標(biāo)準(zhǔn)格式
- 2025國(guó)際租賃合同 標(biāo)準(zhǔn)版 模板
- 規(guī)劃7路技術(shù)標(biāo)
- 2025農(nóng)副產(chǎn)品采購(gòu)招標(biāo)合同范本
- 2025年普法知識(shí)競(jìng)賽題庫(kù)及答案(共70題)
- 四川省達(dá)州市普通高中2025屆第二次診斷性測(cè)試物理試題及答案
- 2025年中小學(xué)學(xué)校食品安全與膳食經(jīng)費(fèi)專(zhuān)項(xiàng)整治工作情況報(bào)告
- 經(jīng)管員中級(jí)理論知識(shí)試題紅色為參考答案
- 2025-2030中國(guó)生牛肉市場(chǎng)銷(xiāo)售渠道與未來(lái)盈利模式預(yù)測(cè)研究報(bào)告
- 第14課 遼宋夏金元時(shí)期的科技與文化-2024-2025學(xué)年七年級(jí)歷史下冊(cè)互動(dòng)課堂教學(xué)設(shè)計(jì)寶典(統(tǒng)編版2024)
- 裝修多人合伙協(xié)議書(shū)
- 2025年廣東省深圳市21校初三一模英語(yǔ)試題及答案
- 白石洞等四座水庫(kù)水資源特許經(jīng)營(yíng)項(xiàng)目實(shí)施方案
- 2025年河南交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 關(guān)于納粹德國(guó)元首希特勒的歷史資料課件
- 【MOOC】軟件安全之惡意代碼機(jī)理與防護(hù)-武漢大學(xué) 中國(guó)大學(xué)慕課MOOC答案
評(píng)論
0/150
提交評(píng)論