檢測(cè)到您已登錄華為云國(guó)際站賬號(hào),為了您更好的體驗(yàn),建議您訪問國(guó)際站服務(wù)網(wǎng)站 http://www.cqfng.cn/intl/zh-cn
不再顯示此消息
1)存儲(chǔ)過程是預(yù)編譯過的,執(zhí)行效率高。2)存儲(chǔ)過程的代碼直接存放于數(shù)據(jù)庫(kù)中,通過存儲(chǔ)過程名直接調(diào)用,減少網(wǎng)絡(luò)通訊。3)安全性高,執(zhí)行存儲(chǔ)過程需要有一定權(quán)限的用戶。4)存儲(chǔ)過程可以重復(fù)使用,可減少數(shù)據(jù)庫(kù)開發(fā)人員的工作量。
注意點(diǎn):不能直接單獨(dú)使用局部變量,一般用于在存儲(chǔ)過程以及存儲(chǔ)函數(shù)中使用! 2.2、存儲(chǔ)過程創(chuàng)建 語(yǔ)法介紹 存儲(chǔ)過程:一組已經(jīng)預(yù)先編譯好的sql語(yǔ)句的集合,理解為批處理語(yǔ)句(增加流程控制語(yǔ)句),一般在復(fù)雜邏輯中才會(huì)使用存儲(chǔ)過程。 創(chuàng)建語(yǔ)法介紹:如果存儲(chǔ)過程中只有一條SQL語(yǔ)句可以省略BEGIN END。
DECLARE plan INTEGER; BEGIN DBMS_JOB.SUBMIT(plan,'存儲(chǔ)過程名稱;',sysdate, 時(shí)間); END; --查詢 計(jì)劃編號(hào),執(zhí)行的存儲(chǔ)過程, 設(shè)定的執(zhí)行時(shí)間 select job,what,interval from
二、存儲(chǔ)過程 2.1 存儲(chǔ)過程簡(jiǎn)介 我們常用的數(shù)據(jù)庫(kù)操作語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要先編譯,然后執(zhí)行,而存儲(chǔ)過程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過指定存儲(chǔ)過程的名字并給定參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來調(diào)用執(zhí)行它。
通過存儲(chǔ)過程可以使相關(guān)的動(dòng)作在一起發(fā)生,從而可以維護(hù)數(shù)據(jù)庫(kù)的完整性。 3. 再運(yùn)行存儲(chǔ)過程前,數(shù)據(jù)庫(kù)已對(duì)其進(jìn)行了語(yǔ)法和句法分析,并給出了優(yōu)化執(zhí)行方案。這種已經(jīng)編譯好的過程可極大地改善SQL語(yǔ)句的性能。 由于執(zhí)行SQL語(yǔ)句的大部分工作已經(jīng)完成,所以存儲(chǔ)過程能以極快的速度執(zhí)行。 4
調(diào)用存儲(chǔ)過程時(shí),定義變量declare一定要在begin之前。 declare -- Local variables here i integer; a VARCHAR(100); b VARCHAR(20);
? 目錄 存儲(chǔ)過程(Stored Procedures)的創(chuàng)建和執(zhí)行 創(chuàng)建存儲(chǔ)過程 示例:創(chuàng)建一個(gè)簡(jiǎn)單的存儲(chǔ)過程 執(zhí)行存儲(chǔ)過程 示例:執(zhí)行存儲(chǔ)過程 函數(shù)(Functions)的創(chuàng)建和使用 創(chuàng)建用戶自定義函數(shù)(User-Defined Functions,UDF) 示例:創(chuàng)建一個(gè)簡(jiǎn)單的用戶自定義函數(shù)
用戶自定義存儲(chǔ)過程 -----/////------- ---1.創(chuàng)建無參數(shù)的存儲(chǔ)過程※ use QQDB --需求:查詢李四賬戶的余額,如果大于500,輸出大于500,否則輸出小于500 go create proc usp_findPriceByLs as --sql語(yǔ)句 declare
PUT_LINE('在RUNBYPARMETERS過程中出錯(cuò)!'); end; 其中參數(shù)IN表示輸入?yún)?shù),是參數(shù)的默認(rèn)模式。 OUT表示返回值參數(shù),類型可以使用任意Oracle中的合法類型。 OUT模式定義的參數(shù)只能在過程體內(nèi)部賦值,表示該參數(shù)可以將某個(gè)值傳遞回調(diào)用他的過程 IN OUT表示該參數(shù)可以向該過程中傳遞值,也可以將某個(gè)值傳出去。
二、存儲(chǔ)過程 2.1 存儲(chǔ)過程簡(jiǎn)介 我們常用的數(shù)據(jù)庫(kù)操作語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要先編譯,然后執(zhí)行,而存儲(chǔ)過程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過指定存儲(chǔ)過程的名字并給定參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來調(diào)用執(zhí)行它。
二、存儲(chǔ)過程 2.1 存儲(chǔ)過程簡(jiǎn)介 我們常用的數(shù)據(jù)庫(kù)操作語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要先編譯,然后執(zhí)行,而存儲(chǔ)過程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過指定存儲(chǔ)過程的名字并給定參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來調(diào)用執(zhí)行它。
二、存儲(chǔ)過程 2.1 存儲(chǔ)過程簡(jiǎn)介 我們常用的數(shù)據(jù)庫(kù)操作語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要先編譯,然后執(zhí)行,而存儲(chǔ)過程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過指定存儲(chǔ)過程的名字并給定參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來調(diào)用執(zhí)行它。
必須要使用程序包、過程和函數(shù)對(duì)象。 本章將學(xué)習(xí)過程、函數(shù)和程序包等概念。過程與函數(shù)是命名的PL/SQL塊,可以被編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,以備執(zhí)行,其他PL/SQL塊可以按名稱來調(diào)用。實(shí)際應(yīng)用中,可以將商業(yè)邏輯、企業(yè)規(guī)則寫成過程或函數(shù)保存到數(shù)據(jù)庫(kù)中,以便共享。過程與函數(shù)也被稱為子程序
此次兩個(gè)存儲(chǔ)過程均為查詢動(dòng)作,用explain下推不成功,請(qǐng)教各位大俠!例子如下:EXPLAINSELECT CAST( T.pcbasn AS VARCHAR ) pcbasn,CAST ( T.imei AS VARCHAR ) imei,CAST ( T.inputsn AS
2 rows fetched.--刪除存儲(chǔ)過程。 DROP PROCEDURE p_no_param;使用帶參數(shù)的存儲(chǔ)過程。--為存儲(chǔ)過程案例準(zhǔn)備基礎(chǔ)表。 --刪除重名的臨時(shí)表。 DROP TABLE IF EXISTS table_temp; --創(chuàng)建臨時(shí)表。 CREATE TABLE table_temp(f1 INT
使用不帶參數(shù)的存儲(chǔ)過程。--為存儲(chǔ)過程案例準(zhǔn)備基礎(chǔ)表。 --刪除重名的臨時(shí)表。 DROP TABLE IF EXISTS table_temp; --創(chuàng)建臨時(shí)表。 CREATE TABLE table_temp(f1 INT, f2 VARCHAR2(20));存儲(chǔ)過程和函數(shù)存儲(chǔ)在同一個(gè)
END; /參數(shù)說明OR REPLACE如果存儲(chǔ)過程已經(jīng)存在,替換原有的存儲(chǔ)過程。IF NOT EXIST判斷存儲(chǔ)過程是否存在。procedure_name存儲(chǔ)過程名。schema_name存儲(chǔ)過程所有者。args_list參數(shù)列表。包含輸入?yún)?shù)(in)、輸出參數(shù)(out)和輸入輸出參數(shù)(in
語(yǔ)句的集合??梢栽跀?shù)據(jù)庫(kù)層面做一些業(yè)務(wù)處理 說白了存儲(chǔ)過程其實(shí)就是將sql語(yǔ)句封裝為方法,然后可以調(diào)用方法執(zhí)行sql語(yǔ)句而已 存儲(chǔ)過程的好處 安全 高效 復(fù)用性強(qiáng) 10.存儲(chǔ)函數(shù) 存儲(chǔ)函數(shù)和存儲(chǔ)過程是非常相似的。存儲(chǔ)函數(shù)可以做的事情,存儲(chǔ)過程也可以做到! 存儲(chǔ)函數(shù)有返回值,存儲(chǔ)過程沒有返回值(參數(shù)的out其實(shí)也相當(dāng)于是返回?cái)?shù)據(jù)了)
刪除存儲(chǔ)過程功能描述刪除存儲(chǔ)過程。注意事項(xiàng)刪除確定存在的存儲(chǔ)過程時(shí),可不使用關(guān)鍵字IF EXISTS。刪除不確定是否存在的存儲(chǔ)過程,建議使用“DROP PROCEDURE IF EXISTS procedure_name;”,避免因要?jiǎng)h除的存儲(chǔ)過程不存在而返回錯(cuò)誤,普通用戶不可以
其實(shí)這個(gè)SQL中的存儲(chǔ)過程很像Java中的定義函數(shù),調(diào)用函數(shù)。 首先看定義: create procedure 過程名(參數(shù)...) begin SQL語(yǔ)句... end1234 調(diào)用: call 過程名(實(shí)參)1 有一個(gè)需要注意的地方: 在定義前,需要先把默認(rèn)的語(yǔ)句結(jié)束’;’號(hào)改成其它,如’&&’