首頁 資料庫 Oracle oracle資料庫的預存程序是什麼?

oracle資料庫的預存程序是什麼?

Aug 22, 2020 pm 03:19 PM
oracle資料庫 儲存過程

oracle資料庫的預存程序:一組為了完成特定功能的SQL語句集,經過編譯後儲存在資料庫中。預存程序是由流控制和SQL語句書寫的過程,這個過程經過編譯和最佳化後儲存在資料庫伺服器中,應用程式使用時只要呼叫即可。

oracle資料庫的預存程序是什麼?

預存程序(Stored Procedure )是一組為了完成特定功能的SQL 語句集,經過編譯後儲存在資料庫中。使用者透過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來執行它。預存程序是資料庫中的重要對象,任何一個設計良好的資料庫應用程式都應該用到預存程序。 

預存程序是由流控制和SQL 語句書寫的過程,這個過程經過編譯和最佳化後儲存在資料庫伺服器中,應用程式使用時只要呼叫即可。在ORACLE 中,若干個有連結的過程可以組合在一起構成一個程式包。

優點:

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

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

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

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

 簡單說,你在你的機器上寫了個存儲過程,這個存儲過程像那些表裡的數據一樣被放在遙遠的數據庫伺服器當中,但是它又是可執行的代碼,其他能連到資料庫伺服器的用戶,可以呼叫你寫的預存程序

 它的作用是隱藏細節,就是說,你寫的預存程序程式碼可能很複雜,但其他人呼叫它卻很簡單,不用具體知道它是如何做的,且一次能完成多個指令 

基本語法

CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)] 
{AS|IS} 
[说明部分] 
BEGIN 
可执行部分 
[EXCEPTION 
错误处理部分] 
END [过程名];
登入後複製

1、可選關鍵字OR REPLACE 表示如果預存程序已經存在,則用新的預存程序覆蓋,通常用戶預存程序的重建。

2、參數部分用來定義多個參數(如果沒有參數,就可以省略)。參數有三種形式:IN、OUT和IN OUT。如果沒有指明參數的形式,則預設為IN。

3、關鍵字AS也可以寫成IS,後面接著過程的說明部分,可以在此定義過程的局部變數。

4、寫預存程序可以使用任何文字編輯器或直接在SQLPLus環境下進行,寫好的預存程序必須在SQLPLus環境下編譯,產生編譯程式碼,原程式碼和編譯程式碼在編譯過程中都會存入資料庫。編譯成功的預存程序就可以在ORacle環境下進行呼叫了。

5、一個預存程序在不需要時可以刪除。刪除儲存過程的人是過程的創建者或擁有DROP ANY PROCEDURE系統權限的人。刪除預存程序的語法如下:

DROP PROCEDURE 存储过程名;
登入後複製

6、如果要重新編譯一個預存程序,則只能是過程的創建者或擁有ALTER ANY PROCEDURE系統權限的人。語法如下:

ALTER PROCEDURE 存储过程名 COMPILE;
登入後複製

7、執行(或呼叫)預存程序的人是過程的創建者或是擁有EXECUTE ANY PROCEDURE系統權限的人,或是被擁有者授予EXECUTE 權限的人。執行的方法如下:

方法1: 

EXECUTE 模式名.存储过程名[(参数...)];
登入後複製

方法2: 

BEGIN 
模式名.存储过程名[(参数...)]; 
END;
登入後複製

8、傳遞的參數必須與定義的參數類型、個數和順序一致(如果參數定義了預設值,則呼叫時可以省略參數)。參數可以是變數、常數或表達式。

9、as和is的區別:在預存程序(procedure)和函數(function)中兩者都可以使用,但是使用IS將無法使用調試模式調試該存儲函數;在視圖中只能用AS不能用IS,在遊標(CURSOR)中只能用IS不能用AS。

10、oracle中的decode函數

意義解釋:

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
登入後複製

該函數的意義如下:

IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF
登入後複製
decode(字段或字段的运算,值1,值2,值3)
登入後複製

這個函數運行的結果是,當當欄位或欄位的運算的值等於值1時,函數傳回值2,否則傳回值3

 當然值1,值2,值3也可以是表達式,這個函數使得某些sql語句簡單了許多

範例:

select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
登入後複製

sign()函數根據某個值是0、正數還是負數,分別傳回0、1、-1

例如:

變數1=10,變數2=20

則sign(變數1-變數2)回傳-1,decode解碼結果為“變數1”,達到了取較小值的目的。

11、nvl函數

NVL函數的格式如下:NVL(expr1,expr2)

意思是:如果oracle第一個參數為空那麼顯示第二個參數的值,如果第一個參數的值不為空,則顯示第一個參數本來的值。

NVL2函数的格式如下:NVL2(expr1,expr2, expr3)

含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。

NULLIF(exp1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值。

Coalese函数的作用是的NVL的函数有点相似,其优势是有更多的选项。

格式如下:

Coalesce(expr1, expr2, expr3….. exprn)
登入後複製

表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。

返回表达式中第一个非空表达式,如有以下语句:   

SELECT COALESCE(NULL,NULL,3,4,5) FROM dual
登入後複製

其返回结果为:3

如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值

12、max函数

对字符型数据的最大值,是按照首字母由A~Z的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。

13、随机抽取N条记录

https://blog.csdn.net/bbliutao/article/details/7727322

14、untion all

union all,解释为联合所有。

Union解释为联合。union或者Union all实现把前后两个select集合的数据联合起来,组成一个结果集查询输出。这就要求联合前后的结果集,需要分别有相同的输出字段的数目,并且对应的字段类型要相同。
SELECT column1, column2 from table1 union (all) select column1, column2 from table2

以上语句要求量表的column1字段类型相同,column2类型相同。而且每个查询的数目都是一样的。UNION ALL和UNION的差别就在ALL上面,第一个叫联合所有,说明会显示前后两个查询所有的数据,而UNION没有ALL(所有)这个单词,实现将前后两个查询的数据联合到一起后,去掉重复的数据显示

推荐教程:《Oracle教程

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

oracle怎麼查看表屬於哪個表空間 oracle怎麼查看表屬於哪個表空間 Jul 06, 2023 pm 01:31 PM

oracle查看表屬於哪個表空間的方法:1、使用「SELECT」語句,並透過指定表名來查找指定表所屬的表空間;2、使用Oracle提供的資料庫管理工具來查看表所屬的表空間,這些工具通常提供了圖形介面,使得操作更加直覺和方便;3、在SQL*Plus中,可以透過輸入「DESCRIBEyour_table_name;」命令來查看表所屬的表空間。

Oracle儲存程序實作批次更新的步驟與注意事項 Oracle儲存程序實作批次更新的步驟與注意事項 Mar 08, 2024 pm 04:12 PM

標題:Oracle預存程​​序實現批次更新的步驟與注意事項在Oracle資料庫中,預存程序是一組為了提高資料庫效能、重複使用程式碼、增強安全性的SQL語句集合,透過預存程序可以實現批次更新資料的操作。本文將介紹如何使用Oracle預存程​​序實現批次更新,並提供具體的程式碼範例。步驟一:建立預存程序首先,我們需要建立一個預存過程,用來實現批次更新的操作。以下是建立預存程序的

如何使用PDO連線到Oracle資料庫 如何使用PDO連線到Oracle資料庫 Jul 28, 2023 pm 12:48 PM

如何使用PDO連接到Oracle資料庫概述:PDO(PHPDataObjects)是PHP中一個操作資料庫的擴充庫,它提供了一個統一的API來存取多種類型的資料庫。在本文中,我們將討論如何使用PDO連接到Oracle資料庫,並執行一些常見的資料庫操作。步驟:安裝Oracle資料庫驅動擴充功能在使用PDO連接Oracle資料庫之前,我們需要安裝對應的Oracl

oracle如何只取一條重複的數據 oracle如何只取一條重複的數據 Jul 06, 2023 am 11:45 AM

oracle只取一條重複的數據的步驟:1、使用SELECT語句結合GROUP BY和HAVING子句來查找重複數據;2、使用ROWID刪除重複數據,可以確保刪除的是精確的重複數據記錄,或者使用「ROW_NUMBER ()」函數刪除重複數據,這將刪除每組重複資料中的除了第一筆記錄之外的其他記錄;3、使用「select count(*) from」語句傳回刪除記錄數確保結果。

MySQL怎麼刪除預存程序 MySQL怎麼刪除預存程序 Sep 05, 2023 am 10:25 AM

MySQL刪除預存程序的方法有使用DROP PROCEDURE語句、使用MySQL Workbench和使用命令列工具等。詳細介紹:1、使用DROP PROCEDURE語句,其步驟為先開啟MySQL客戶端或使用任何支援MySQL的工具,再連接到您的MySQL資料庫,最後執行以下SQL語句來刪除預存程序;2、使用MySQL Workbench刪除儲存過程等等。

實現PHP和Oracle資料庫的資料導入 實現PHP和Oracle資料庫的資料導入 Jul 12, 2023 pm 06:46 PM

實作PHP和Oracle資料庫的資料匯入在Web開發中,使用PHP作為伺服器端腳本語言可以方便地操作資料庫。 Oracle資料庫作為一種常見的關聯式資料庫管理系統,具備強大的資料儲存與處理能力。本文將介紹如何使用PHP將資料匯入Oracle資料庫中,並給出對應的程式碼範例。首先,我們需要確保已經安裝了PHP和Oracle資料庫,並且已經配置了PHP對Orac

如何使用php擴充PDO連接Oracle資料庫 如何使用php擴充PDO連接Oracle資料庫 Jul 29, 2023 pm 07:21 PM

如何使用PHP擴充PDO連接Oracle資料庫導語:PHP是一種非常流行的伺服器端程式語言,而Oracle是一款常用的關係型資料庫管理系統。本文將介紹如何使用PHP擴充PDO(PHPDataObjects)來連接Oracle資料庫。一、安裝PDO_OCI擴充要連接Oracle資料庫,首先需要安裝PDO_OCI擴充。以下是安裝PDO_OCI擴充的步驟:確保

Oracle預存程​​序:判斷表格是否存在的實作方法 Oracle預存程​​序:判斷表格是否存在的實作方法 Mar 08, 2024 pm 09:18 PM

Oracle資料庫中預存程序是一種特定類型的預存程序,用於在資料庫中執行一系列的SQL語句和資料操作。在實際的資料庫開發工作中,有時候我們需要判斷某個表格是否存在於資料庫中,這樣可以在預存過程中做一些判斷和邏輯處理。以下我們將介紹如何在Oracle資料庫中實作判斷表是否存在的方法,並提供具體的程式碼範例。首先,我們可以利用系統表user_tables或all_t

See all articles