oracle中預存程序與函數的差別是什麼
區別:1、預存程序用於在資料庫中完成特定的操作或任務,而函數用於特定資料;2、預存程序的程式頭部宣告用PROCEDURE,宣告時不需要傳回類型,而函數的程式頭部聲明用FUNCTION,聲明時要描述回傳類型。
本教學操作環境: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)中可以呼叫函式 |
實際舉例
#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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

解決 Oracle 游標關閉問題的方法包括:使用 CLOSE 語句顯式關閉游標。在 FOR UPDATE 子句中聲明游標,使其在作用域結束後自動關閉。在 USING 子句中聲明游標,使其在關聯的 PL/SQL 變量關閉時自動關閉。使用異常處理確保在任何異常情況下關閉游標。使用連接池自動關閉游標。禁用自動提交,延遲游標關閉。

Oracle 中,FOR LOOP 循環可動態創建游標, 步驟為:1. 定義游標類型;2. 創建循環;3. 動態創建游標;4. 執行游標;5. 關閉游標。示例:可循環創建游標,顯示前 10 名員工姓名和工資。

要停止 Oracle 數據庫,請執行以下步驟:1. 連接到數據庫;2. 優雅關機數據庫(shutdown immediate);3. 完全關機數據庫(shutdown abort)。

在CentOS系統上搭建Hadoop分佈式文件系統(HDFS)需要多個步驟,本文提供一個簡要的配置指南。一、前期準備安裝JDK:在所有節點上安裝JavaDevelopmentKit(JDK),版本需與Hadoop兼容。可從Oracle官網下載安裝包。環境變量配置:編輯/etc/profile文件,設置Java和Hadoop的環境變量,使系統能夠找到JDK和Hadoop的安裝路徑。二、安全配置:SSH免密登錄生成SSH密鑰:在每個節點上使用ssh-keygen命令

Oracle 日誌文件寫滿時,可採用以下解決方案:1)清理舊日誌文件;2)增加日誌文件大小;3)增加日誌文件組;4)設置自動日誌管理;5)重新初始化數據庫。在實施任何解決方案前,建議備份數據庫以防數據丟失。

Oracle不僅是數據庫公司,還是雲計算和ERP系統的領導者。 1.Oracle提供從數據庫到雲服務和ERP系統的全面解決方案。 2.OracleCloud挑戰AWS和Azure,提供IaaS、PaaS和SaaS服務。 3.Oracle的ERP系統如E-BusinessSuite和FusionApplications幫助企業優化運營。

可以通過使用 Oracle 的動態 SQL 來根據運行時輸入創建和執行 SQL 語句。步驟包括:準備一個空字符串變量來存儲動態生成的 SQL 語句。使用 EXECUTE IMMEDIATE 或 PREPARE 語句編譯和執行動態 SQL 語句。使用 bind 變量傳遞用戶輸入或其他動態值給動態 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 執行動態 SQL 語句。
