




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Oracle中存儲過程的介紹,PL/SQL簡介(過程化SQL語言),PL/SQL是Oracle在標準SQL語言上的過程性擴展。 不僅允許嵌入SQL語句,而且允許定義變量和常量,允許過程語言結構(條件分支語句和循環(huán)語句),允許使用例外處理Oracle錯誤。 PL/SQL最主要的功能是提供了一種服務器端的存儲過程語言,安全、強健、易于使用。,使用PL/SQL塊的優(yōu)點,對于一般的數(shù)據(jù)庫(如SQL SERVER、DB2等),當應用程序訪問RDBMS時,每次只能發(fā)送單條SQL語句。執(zhí)行4條SQL語句需要在網(wǎng)絡上發(fā)送4次語句。 對于Oracle數(shù)據(jù)庫來說,通過使用PL/SQL塊,可以將多條SQL語句組織到同一個PL/SQL塊中,從而降低網(wǎng)絡開銷,提高應用程序性能。,存儲過程(Procedure),存儲過程是Oracle數(shù)據(jù)庫的一種對象,是一種帶名的PL/SQL過程程序塊,是能完成一定操作的一組SQL語句,它在創(chuàng)建后,以編譯了的形式存儲在數(shù)據(jù)庫中,可以被有權用戶在任何需要的地方調用。 通過使用過程,不僅可以簡化客戶端應用程序的開發(fā)和維護,而且可以提高應用程序的運行性能。(假如某應用程序需要經(jīng)常向某張表中插入數(shù)據(jù),并且在插入數(shù)據(jù)時需要對數(shù)據(jù)進行檢查驗證,為了簡化客戶端的維護,可以使用存儲過程),在項目開發(fā)中使用存儲過程的好處,如果我們通過創(chuàng)建存儲過程以及程序中調用存儲過程,就可以避免將SQL語句同JSP代碼混雜在一起 第一,大大提高效率。存儲過程本身的執(zhí)行速度很快,而且,調用存儲過程可以大大減少同數(shù)據(jù)庫的交互次數(shù),減少網(wǎng)絡開銷。 第二,提高安全性。假如將SQL語句混合在JSP代碼中,一旦代碼失密,同時也就意味著數(shù)據(jù)庫結構失密。 第三,有利于SQL語句的重用。,建立存儲過程,CREATE OR REPLACE PROCEDURE Procedure_name (argument1 mode1 datatype1,argument2 mode2 datatype2,) IS AS PL/SQL BLOCK;,調用存儲過程,在Oracle的SQL*PLUS中調用過程時,需要使用CALL或EXECUTE命令。 在PL/SQL塊中存儲過程可以直接引用。,過程參數(shù),建立過程時,既可以指定過程參數(shù),也可以不提供任何參數(shù)。 過程參數(shù)包括輸入?yún)?shù)、輸出參數(shù)和輸入輸出參數(shù)3種類型。 輸入?yún)?shù)(IN)接收調用環(huán)境的輸入數(shù)據(jù);輸出參數(shù)(OUT)用于將輸出數(shù)據(jù)傳遞到調用環(huán)境;輸入輸出參數(shù)(IN OUT)不僅接收輸入數(shù)據(jù),而且輸出數(shù)據(jù)到調用環(huán)境。,無參數(shù)的過程,帶輸入?yún)?shù)的過程(IN關鍵字,默認參數(shù)模式是輸入?yún)?shù))需要為輸入?yún)?shù)提供數(shù)據(jù)值。,帶輸出參數(shù)的過程(OUT 關鍵字,需要使用變量接收輸出參數(shù)的數(shù)據(jù)值),帶輸入輸出參數(shù)(IN OUT)在調用之前需要定義變量輸入值,調用結束之后使用變量輸出數(shù)據(jù)。,存儲過程中可以使用異常處理,JAVA中調用Oracle存儲過程,存儲過程(僅輸入?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) ,帶返回值的存儲過程,存儲過程為: 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) ,返回結果集:需要定義游標(類似于指針)作為輸出參數(shù),并且要用到Oracle中包(package)的概念,1.包頭(負責定義): CREATE OR REPLACE PACKAGE TESTPACKAGE AS TYPE Test_CURSOR IS REF CURSOR;-定義游標變量 PROCEDURE TESTC(p_CURSOR OUT Test_CURSOR)-定義過程,使用游標作為輸出參數(shù) end TESTPACKAGE; 2.包體(具體實現(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國美化天線市場分析及競爭策略研究報告
- 2024年四川煙草商業(yè)系統(tǒng)員工招聘業(yè)務操作類崗位總及筆試參考題庫附帶答案詳解
- 2025至2030年中國罐頭食品機械數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國絕緣操作桿測試儀市場分析及競爭策略研究報告
- 2023浙江金華市就業(yè)服務中心編外工作人員招聘2人筆試參考題庫附帶答案詳解
- 上轉換熒光超敏側流試紙的開發(fā)及其核酸快速檢測應用
- MiR-148a-3p通過靶向MMP13調控骨肉瘤的機制研究
- 城鄉(xiāng)融合背景下鄉(xiāng)村武術發(fā)展的困囿與突圍研究-以大呂武術為例
- 2025至2030年中國窄三角銼市場分析及競爭策略研究報告001
- 2025至2030年中國空氣壓縮機專用合成潤滑油行業(yè)投資前景及策略咨詢研究報告
- 乳腺纖維腺瘤演示課件
- 肥大細胞增多癥培訓演示課件
- RTO蓄熱焚燒系統(tǒng)操作規(guī)程
- GB/T 15622-2023液壓缸試驗方法
- 挖掘機維護保養(yǎng)記錄
- CONSORT2010流程圖(FlowDiagram)【模板】文檔
- 化學實驗論文范文(6篇)
- 裝修公司入職勞動合同
- 華容道24局最佳解法
- (完整版)施工單位工程竣工報告
- 游戲綜合YY頻道設計模板
評論
0/150
提交評論