中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle存儲過程Procedure簡單介紹(第一部分)

發布時間:2020-08-11 14:15:35 來源:ITPUB博客 閱讀:275 作者:edge_dba 欄目:關系型數據庫
我們都知道SQL語言是沒有判斷和過程控制語句的,而PL/SQL又很好的補充了SQL語言這方面的不足。而存儲過程也是一種PL/SQL塊,但是存儲過程又跟傳統的PL/SQL塊不一樣,存儲過程是以命名的方式存儲于數據庫中的。它有很多優點,比如:
1、存儲過程是以命名的數據庫對象形式存儲于數據庫當中。存儲在數據庫中的優點是很明顯的,因為代碼不保存在本地,用戶可以在任何客戶機上登錄到數據庫,并調用或修改代碼。
2、存儲過程可由數據庫提供安全保證,要想使用存儲過程,需要有存儲過程的所有者的授權,只有被授權的用戶或創建者本身才能調用執行存儲過程。
3、存儲過程的信息是寫入數據字典的,所以存儲過程可以看作是一個公用模塊,用戶編寫的PL/SQL程序或其他存儲過程都可以調用它(但存儲過程和函數不能調用PL/SQL程序)。一個重復使用的功能,可以設計成為存儲過程。
4、像其他高級語言的過程和函數一樣,可以傳遞參數給存儲過程,參數的傳遞也有多種方式。存儲過程可以有返回值,也可以沒有返回值,存儲過程的返回值必須通過參數帶回;函數有一定的數據類型,像其他的標準函數一樣,我們可以通過對函數名的調用返回函數值。
5、存儲過程需要進行編譯,以排除語法錯誤,只有編譯通過才能調用。
Oracle存儲過程基本語法
CREATE OR REPLACE PROCEDURE 存儲過程名(參數) 
IS/AS 
變量 
BEGIN 
可執行部分 
EXCEPTION 
錯誤處理部分 
END; 
按照慣例舉個hello world的例子
create or replace procedure hello as 
 say_hi varchar2(20); 
begin 
 say_hi := 'Hello World'; 
 dbms_output.put_line(say_hi); 
end; 

語法說明:
1、create or replace procedure是創建存儲過程的一個基本語法
2、在存儲過程(PROCEDURE)和函數(FUNCTION)中使用IS和AS并沒有太大區別,在視圖(VIEW)中只能用AS不能用IS,在游標(CURSOR)中只能用IS不能用AS。后面一般跟變量聲明。 
3、begin和end之間是PL/SQL程序體,其中exception來指定失敗處理流程。 
調用一個存儲過程
begin 
 -- Call the procedure 
 hello; 
end; 
存儲的查看和刪除:
查詢存儲過程hello的創建腳本
select * from user_source where name='HELLO';
查看存儲過程hello的狀態
select * from user_objects where object_name = 'HELLO';
重點看status列的狀態,valid表示該存儲過程是通過編譯的,invalid
我們可以看到一個存儲過程是有參數可以聲明的,那么關于參數肯定就有輸入和輸出參數的區別了
三種形式的參數
1、IN 定義一個輸入參數變量,用于傳遞參數給存儲過程
2、OUT 定義一個輸出參數變量,用于從存儲過程獲取數據
3、IN OUT 定義一個輸入、輸出參數變量,兼有以上兩者的功能
參數的定義形式和作用如下:
IN參數
語法:參數名 IN 數據類型 DEFAULT 值;
定義一個輸入參數變量,用于傳遞參數給存儲過程。在調用存儲過程時,主程序的實際參數可以是常量、有值變量或表達式等。DEFAULT 關鍵字為可選項,用來設定參數的默認值。如果在調用存儲過程時不指明參數,則參數變量取默認值。在存儲過程中,輸入變量接收主程序傳遞的值,但不能對其進行賦值。
OUT參數
語法:參數名 OUT 數據類型;
定義一個輸出參數變量,用于從存儲過程獲取數據,即變量從存儲過程中返回值給主程序。
在調用存儲過程時,主程序的實際參數只能是一個變量,而不能是常量或表達式。在存儲過程中,參數變量只能被賦值而不能將其用于賦值,在存儲過程中必須給輸出變量至少賦值一次。
IN OUT參數
語法:參數名 IN OUT 數據類型 DEFAULT 值;
定義一個輸入、輸出參數變量,兼有以上兩者的功能。在調用存儲過程時,主程序的實際參數只能是一個變量,而不能是常量或表達式。DEFAULT 關鍵字為可選項,用來設定參數的默認值。在存儲過程中,變量接收主程序傳遞的值,同時可以參加賦值運算,也可以對其進行賦值。在存儲過程中必須給變量至少賦值一次。
1、參數in的舉例
create or replace procedure say_hello (to_who in varchar2 default 'zhangsan') as 
begin 
 dbms_output.put_line('Say Hi to '|| to_who); 
end; 
執行
begin 
 -- Call the procedure 
 say_hello( 'peter'); 
end; 
2、參數out的舉例
輸出模式的參數,用于輸出值,會忽略傳入的值。在子程序內部可以對其進行修改。 
輸出:子程序執行完畢后,out模式參數最終的值會賦值給調用時對應的<實參變量>。 
注意:out模式參數的調用,必須通過變量。
create or replace procedure pout(p1 out int) as 
begin 
 p1 := 33; 
end; 
執行
declare 
var1 int := 30; 
begin 
 dbms_output.put_line(var1); 
 pout(var1); 
 dbms_output.put_line(var1); 
end; 
第一次輸出30,第二次輸出33。
3、參數in out的舉例
輸入輸出模式:能接收傳入的實參值;在子程序內部可以修改; 可以輸出(必須用實參變量調用)
create or replace procedure pinout(p1 in out int) as 
begin 
 dbms_output.put_line(p1); 
 p1 := 44; 
end; 
執行
declare 
var1 int := 40; 
begin 
 dbms_output.put_line(var1); 
 pinout(var1); 
 dbms_output.put_line(var1); 
end; 
到這里我們介紹了存儲過程的一些基本概念,在下一篇博客里,我們要介紹存儲過程的一些高級功能。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瑞安市| 碌曲县| 安阳市| 肃宁县| 乌海市| 芒康县| 华阴市| 德保县| 台江县| 舟曲县| 姚安县| 庐江县| 斗六市| 西乌| 浮梁县| 石棉县| 南通市| 丹江口市| 鲜城| 五原县| 莱阳市| 台山市| 景宁| 兰溪市| 永修县| 来凤县| 东宁县| 宁武县| 长寿区| 永顺县| 安平县| 化州市| 马鞍山市| 台中市| 东阿县| 吉林省| 都兰县| 崇明县| 防城港市| 平泉县| 广德县|