搜尋
首頁資料庫Oracleoracle中預存程序與函數的差別是什麼

oracle中預存程序與函數的差別是什麼

Feb 22, 2022 pm 06:38 PM
oracle函數儲存過程

區別:1、預存程序用於在資料庫中完成特定的操作或任務,而函數用於特定資料;2、預存程序的程式頭部宣告用PROCEDURE,宣告時不需要傳回類型,而函數的程式頭部聲明用FUNCTION,聲明時要描述回傳類型。

oracle中預存程序與函數的差別是什麼

本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。

預存程序

預存程序(Stored Procedure )是一組為了完成特定功能的SQL 語句集,經過編譯後儲存在資料庫中。使用者透過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來執行它。預存程序是資料庫中的重要對象,任何一個設計良好的資料庫應用程式都應該用到預存程序。預存程序是由流控制和SQL 語句書寫的過程,這個過程經過編譯和最佳化後儲存在資料庫伺服器中,應用程式使用時只要呼叫即可。在ORACLE 中,若干個有連結的過程可以組合在一起構成一個程式包。

優點:

1、儲存過程只在創造時進行編譯,以後每次執行預存程序都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用預存程序可提高資料庫執行速度。

2、當資料庫複雜操作時(如對多個資料表進行Update、Insert、Query、Delete時),可將此複雜運算以預存程序封裝起來與資料庫提供的交易處理結合一起使用。

3、預存程序可以重複使用,可減少資料庫開發人員的工作量。

4、安全性高,可設定只有某使用者才具有指定預存程序的使用權。

預存程序與函數的差異

二者最大的差異是:

1 ).函數(function)總是向調用者返回數據,並且一般只返回一個值;2).存儲過程(procedure)不直接返回數據,但可以改變輸出參數的值,這可以近似看作能返回值,且預存程序輸出參數的值個數沒有限制。

從一般應用程式來看,如果不需要傳回值或需要多個回傳值,使用預存程序,如果只用一個傳回值,就使用函數。

2、function定義中只能有DDL(如select等)語句;procedure中主要是DML語句(對資料庫進行複雜操作時,如對多個表進行Update、Insert、Query、Delete時)。

如果想要使用select的結果集,則要使用遊標

#預存程序與函數的差異

儲存程序

函數

#用於在資料庫中完成特定的操作或任務(如插入、刪除等)

用於特定資料(如查詢傳回值)

程式頭部宣告用PROCEDURE

##程式頭宣告用FUNCTION

程式頭部宣告時不需要傳回類型

#程式頭部宣告時要描述回傳類型,而且PL/SQL區塊至少要包含一個有效的RETURN語句

#可以使用IN/OUT/IN OUT3種參數模式

可以使用IN/OUT/IN OUT3種參數模式

#可以作為獨立的PL/SQL語句執行

不能獨立執行,必須作為表達式的一部分呼叫

可以透過OUT/IN OUT傳回零個或多個值

對過RETURN語句傳回一個值,且該值與宣告部分一致,也可以透過OUT型別的參數帶出變數

SQL語句(DML或SELECT)中不可以呼叫預存程序

SQL語句(DML或SELECT)中可以呼叫函式

###########################################################

oracle中預存程序與函數的差別是什麼

實際舉例

#1、函數

(1)建立函數

create or replace function get_salary(
    dept_no number,
    emp_count **out** number)
    return number IS
    v_sum number;begin
    ...exception    ...end get_salary

(2)呼叫函數

declare 
    v_num number;
    v_sum number;begin
    ...(这里应该出现函数名表示调用)end

2、預存程序

(1)建立預存程序

create or replace procedure pro_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...
exception
    ...
end proc_demo;

(2)呼叫預存程序

呼叫語法:

1)、exec ;

2)、execute ;

3)、在PL/SQL語句塊中直接呼叫。

例如:    

declare
    v_num number;
    v_sum number(8,2);
begin
    procedure pro_demo(dept_no=>1,sal_num=>900,emp_count=>10)(这里出现存储过程名表示调用,传递参数值用=>)
end;

3、本機預存程序

在PL/SQL中也能在declare區塊中建立本機預存程序,而不使用關鍵字create,其目的是:不用將預存程序儲存在資料庫中,避免更改資料庫時帶來的麻煩,其主要的使用場景是,暫時使用某個預存過程,而不是在以後要重複多次使用。

範例:

declare
    v_num number;
    v_sum number(8,2);
procedure proc_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...(这里不用出现存储过程名)
exception
    ...
end proc_demo;

推薦教學:《Oracle教學

以上是oracle中預存程序與函數的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Oracle備份和恢復:確保數據完整性和可用性Oracle備份和恢復:確保數據完整性和可用性Apr 10, 2025 am 09:40 AM

Oracle備份與恢復的核心目的是在數據丟失或損壞時,能夠快速恢復數據庫到一致的狀態。 1.備份階段:通過RMAN或其他工具,將數據庫文件複製到備份介質中。 2.恢復階段:當數據庫發生故障時,首先恢復備份數據,然後通過應用重做日誌文件,恢復到故障前的狀態。

Oracle Real應用程序群集(RAC):可伸縮性和高可用性Oracle Real應用程序群集(RAC):可伸縮性和高可用性Apr 09, 2025 am 12:16 AM

OracleRAC通過多節點共享數據庫存儲,實現了高可用性和可擴展性。其工作原理包括負載均衡、故障轉移和動態節點擴展,確保系統的高效運行和數據一致性。

Oracle雲基礎架構(OCI):在雲中部署和管理Oracle數據庫Oracle雲基礎架構(OCI):在雲中部署和管理Oracle數據庫Apr 08, 2025 am 12:09 AM

在OCI中部署和管理Oracle數據庫可以通過以下步驟實現:1.創建數據庫實例,使用OCIPythonSDK設置配置參數;2.配置網絡和存儲資源;3.連接到數據庫並執行SQL查詢;4.進行數據庫備份和恢復操作;5.優化數據庫性能,通過調整資源配置、網絡優化和備份策略。這是一個高度自動化的過程,用戶只需提供必要的配置參數,OCI會處理剩餘的工作。

甲骨文面試問題:破解您的數據庫管理員面試甲骨文面試問題:破解您的數據庫管理員面試Apr 07, 2025 am 12:17 AM

OracleDBA面試準備需要掌握數據庫架構、性能調優和備份恢復等核心知識。 1.了解Oracle數據庫架構,包括實例和數據庫的關係。 2.掌握性能調優方法,如SQL調優和索引優化。 3.熟悉備份與恢復策略,使用RMAN和數據泵工具。通過這些準備,你能在面試中展現專業技能,成功通過面試。

高級Oracle SQL調整:優化專家的查詢性能高級Oracle SQL調整:優化專家的查詢性能Apr 06, 2025 am 12:06 AM

OracleSQL调优可以通过以下步骤提升查询性能:1.创建适当的索引,如为department列创建索引;2.分析执行计划,使用EXPLAINPLAN命令查看并优化;3.进行SQL重写,如使用子查询避免不必要的连接操作。通过这些方法,可以显著提升Oracle数据库的查询效率。

Oracle數據庫安全性:硬化和保護您的數據Oracle數據庫安全性:硬化和保護您的數據Apr 05, 2025 am 12:17 AM

Oracle數據庫的安全性可以通過多種措施實現,包括認證、授權、加密和審計。 1)使用密碼文件進行用戶認證和授權;2)通過透明數據加密(TDE)保護敏感數據;3)使用虛擬專用數據庫(VPD)實現細粒度的訪問控制;這些方法確保了數據的機密性、完整性和可用性。

Oracle Goldengate:實時數據複製與集成Oracle Goldengate:實時數據複製與集成Apr 04, 2025 am 12:12 AM

OracleGoldenGate通過捕獲源數據庫的事務日誌並將變更應用到目標數據庫,實現實時數據複製和集成。 1)捕獲變更:讀取源數據庫的事務日誌,轉換為Trail文件。 2)傳輸變更:通過網絡傳輸到目標系統,使用數據泵進程管理傳輸。 3)應用變更:在目標系統上,複製進程讀取Trail文件並應用變更,確保數據一致性。

Oracle PL/SQL Deep Dive:掌握過程,功能和軟件包Oracle PL/SQL Deep Dive:掌握過程,功能和軟件包Apr 03, 2025 am 12:03 AM

OraclePL/SQL中的過程、函數和包分別用於執行操作、返回值和組織代碼。 1.過程用於執行操作,如輸出問候語。 2.函數用於計算並返回值,如計算兩個數之和。 3.包用於組織相關元素,提高代碼的模塊化和可維護性,如管理庫存的包。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),