oracle 存储过程 db,oracle数据库的存储过程是什么?
oracle數據庫的存儲過程:一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中。存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化后存儲在數據庫服務器中,應用程序使用時只要調用即可。
存儲過程(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 IFdecode(字段或字段的運算,值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 allunion 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 存储过程 db,oracle数据库的存储过程是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql数据库(9):常用查询的例子
- 下一篇: hadoop yarn 获取日志_Had