翻譯|使用教程|編輯:李爽夏|2019-01-23 13:17:02.000|閱讀 257 次
概述:本教程說明了有關存儲過程使用的總體方面的信息。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
【下載dotConnect for Oracle最新版本】
dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技術上,為基于Oracle數(shù)據(jù)庫的應用程序提供完整的解決方案。它為設計應用程序結構帶來了新的方法,提高工作效率,使數(shù)據(jù)庫應用程序的開發(fā)更簡便。
本篇文章包含有關存儲過程使用的總體方面的信息。
存儲過程是一個模式對象,由一組SQL語句和其他PL/SQL構造組成,組合在一起,存儲在數(shù)據(jù)庫中,并作為一個單元運行以解決特定問題或執(zhí)行一組相關任務。過程使您能夠?qū)?SQL的易用性和靈活性與結構化編程語言的過程功能結合起來。可能需要執(zhí)行多個SQL語句的大型或復雜處理被移到存儲過程中,并且所有應用程序只調(diào)用這些過程。
類似于存儲過程的對象是存儲函數(shù)。幾乎所有對于過程來說都是正確的,也適用于函數(shù)。這些對象之間的主要區(qū)別在于函數(shù)有返回值,而過程沒有。
存儲過程和函數(shù)可以有輸入、輸出和輸入/輸出參數(shù)。
輸入?yún)?shù)是一個參數(shù),其值被傳遞到存儲過程/函數(shù)模塊中。In參數(shù)的值是常量;不能在模塊中更改或重新分配。
例如,以下過程將一行插入到DEPT表中:
CREATE PROCEDURE dept_insert (pDeptno INTEGER, pDname VARCHAR, pLoc VARCHAR) AS BEGIN INSERT INTO dept(deptno, dname, loc) VALUES (pDeptno, pDname, pLoc); END;
它需要接收要插入到新記錄中的值,因此該過程有三個輸入?yún)?shù),對應于表的每個字段。該過程可以在PL/SQL塊內(nèi)執(zhí)行,如下所示:
begin dept_insert (10, 'Accounting', 'New York'); end;
輸出參數(shù)是一個參數(shù),其值從存儲過程/函數(shù)模塊傳遞回調(diào)用的pl/sql塊。out參數(shù)必須是變量,而不是常量。它只能在模塊中分配的左側(cè)找到。不能將默認值賦給模塊體外部的OUT參數(shù)。換句話說,OUT參數(shù)的行為類似于未初始化的變量。在以下示例中,存儲過程返回表dept中的記錄計數(shù):
CREATE PROCEDURE dept_count (cnt OUT INTEGER) AS BEGIN SELECT COUNT(*) INTO cnt FROM dept; END;
輸入/輸出參數(shù)是一個作為輸入或輸出參數(shù)或兩者兼用的參數(shù)。輸入/輸出參數(shù)的值被傳遞到存儲過程/函數(shù)中,可以為該參數(shù)分配一個新值并從模塊中傳遞出去。輸入/輸出參數(shù)必須是變量,而不是常量。但是,它可以在任務的兩邊找到。換句話說,一個IN/OUT參數(shù)的行為就像一個初始化的變量。
除了標量變量之外,存儲過程還可以返回結果集,即SELECT語句的結果。在Oracle中,光標變量用于這種情況。光標可以解釋為對結果集的引用。下面的示例演示如何將最簡單的SELECT語句包裝在存儲過程中:
CREATE PROCEDURE get_all_depts_proc (cur OUT SYS_REFCURSOR) AS BEGIN OPEN cur FOR SELECT * FROM dept; END;
相同的SELECT語句可以通過存儲函數(shù)使用,如下所示:
CREATE OR REPLACE FUNCTION get_all_depts_func RETURN SYS_REFCURSOR AS cur SYS_REFCURSOR; BEGIN OPEN cur FOR SELECT * FROM dept; RETURN cur; END;
這里,光標作為返回值傳遞,而不是作為輸出參數(shù)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn