精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

oracle過程如何寫 oracle過程怎么執行

Oracle數據庫的存儲過程怎么寫?

Oracle存儲過程基本語法:

10余年的墾利網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整墾利建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯從事“墾利網站設計”,“墾利網站推廣”以來,每個客戶項目都認真落實執行。

CREATE?OR?REPLACE?PROCEDURE?存儲過程名?

IS?

BEGIN?

NULL;?

END;

解釋:

行1:?

CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle數據庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;?

行2:?

IS關鍵詞表明后面將跟隨一個PL/SQL體。?

行3:?

BEGIN關鍵詞表明PL/SQL體的開始。?

行4:?

NULL PL/SQL語句表明什么事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;?

行5:?

END關鍵詞表明PL/SQL體的結束。

oracle中的存儲過程怎么寫

Oracle存儲過程寫法實例

總結項目中寫的存儲過程例子:

Oracle存儲過程基本語法 存儲過程

1 CREATE OR REPLACE PROCEDURE 存儲過程名

2 IS/AS

3 BEGIN

4 NULL;

5 EXCEIPTION;

6 END;

1、創建存儲過程,后面可用is或者as:

create or replace procedure PRO_COMPLAIN_TEMPLATE as

2、定義變量,此處用到了%TYPE和%ROWTYPE,參考 /database/201211/168564.html ,另外定義了一個游標,TEM_INSTANCE TEMPLATE_CUR%ROWTYPE這個類型定義必須要在游標定義之后:

NEED_DO_FOR_ZL INTEGER;

CURRENT_MAX_ID MEMO_TEMPLET.TEMPLET_ID%TYPE;

CURSOR TEMPLATE_CUR IS SELECT TEMPLET_NAME, TEMPLET_CONTENT FROM SYS_COMPLAINT_TEMPLET;

TEM_INSTANCE TEMPLATE_CUR%ROWTYPE;

3、begin開始塊:

begin

4、該插入語句使用了DBLINK,還有使用DBMS_OUTPUT.put_line('打印信息')進行信息輸出:

insert into MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT, TEMPLET_TYPE, TEMPLET_MEMO) (SELECT * FROM MEMO_TEMPLET@COMPANY);

SELECT COUNT(*) INTO NEED_DO_FOR_ZL FROM SYS_COMPLAINT_TEMPLET;

IF(NEED_DO_FOR_ZL 0) THEN

DBMS_OUTPUT.put_line('打印信息');

SELECT MAX(TEMPLET_ID)+1 INTO CURRENT_MAX_ID FROM MEMO_TEMPLET;

DBMS_OUTPUT.put_line('MEMO_TEMPLET最大ID' || CURRENT_MAX_ID);

FOR TEM_INSTANCE IN TEMPLATE_CUR LOOP

INSERT INTO MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT,

TEMPLET_TYPE, TEMPLET_MEMO) VALUES (CURRENT_MAX_ID,

TEM_INSTANCE.TEMPLET_CONTENT, '7', NULL);

CURRENT_MAX_ID := CURRENT_MAX_ID + 1;

DBMS_OUTPUT.put_line(TEM_INSTANCE.TEMPLET_CONTENT);

END LOOP;

END IF;

COMMIT;

4、exception塊,使用WHEN OTHERS THEN,其中用raise可顯示錯誤信息:

exception

WHEN OTHERS THEN

DBMS_OUTPUT.put_line('sqlcode : ' ||sqlcode);

raise;

ROLLBACK;

IF TEMPLATE_CUR%ISOPEN THEN

CLOSE TEMPLATE_CUR;

END IF;

DBMS_OUTPUT.put_line('打印信息');

end;

注:關于游標的使用,如果像本例中使用for循環去遍歷游標的話則不需要顯式的去用open/close

cursor打開和關閉游標,此處會自己處理,如果使用fetch

into的話就需要顯式開關游標,另外任意執行一個update操作,用隱式游標sql的屬性%found,%notfound,%rowcount,%isopen觀察update語句的執行情況,也可以使用來判斷游標狀態,如IF

TEMPLATE_CUR%ISOPEN THEN。

Oracle存儲過程編寫

Oracle存儲過程基本語法:

CREATE?OR?REPLACE?PROCEDURE?存儲過程名?

IS?

BEGIN?

NULL;?

END;解釋:

行1:?

CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle數據庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;?

行2:?

IS關鍵詞表明后面將跟隨一個PL/SQL體。?

行3:?

BEGIN關鍵詞表明PL/SQL體的開始。?

行4:?

NULL PL/SQL語句表明什么事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;?

行5:?

END關鍵詞表明PL/SQL體的結束。

oracle存儲過程基本語法

一:存儲過程

創建存儲過程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統權限? ?

刪除存儲過程,是過程的創建者或者擁有DROP ANY PROCEDURE系統權限?

修改存儲過程,則只能是過程的創建者或者擁有ALTER ANY PROCEDURE系統權限的人

執行(或調用)存儲過程,是過程的創建者或是擁有EXECUTE ANY PROCEDURE系統權限的人或是被擁有者授予EXECUTE權限的人

1:語法

1)創建

CREATE[ORREPLACE]PROCEDURE存儲過程名[(參數[IN|OUT|INOUT] 數據類型...)]

{AS|IS}

[說明部分]

BEGIN

可執行部分

[EXCEPTION

錯誤處理部分]

END[過程名];

說明:

OR REPLACE?表示如果存在就覆蓋存儲過程

參數有三種形式:IN、OUT和IN OUT。則默認為IN。

關鍵字AS也可以寫成IS,后跟過程的說明部分,可以在此定義過程的局部變量。

2)刪除存儲過程:

DROP PROCEDURE 存儲過程名;

3)修改存儲過程:

? ALTER PROCEDURE 存儲過程名 COMPILE;?

4)執行存儲過程

??EXECUTE 模式名.存儲過程名[(參數...)];?

?或

? ?BEGIN?

模式名.存儲過程名[(參數...)];

END;

另外:參數可以是變量、常量或表達式

要其它用戶執行存儲過程須要給其它用戶授權

GRANT EXECUTE ON 存儲過程名 TO 用戶名

2:參數說明

IN 定義一個輸入參數變量,用于傳遞參數給存儲過程

OUT 定義一個輸出參數變量,用于從存儲過程獲取數據

IN OUT 定義一個輸入、輸出參數變量,兼有以上兩者的功能

1)參數名 IN 數據類型 DEFAULT 值;

? ? ??定義一個輸入參數變量,用于傳遞參數給存儲過程。

? ? ??可以是常量、有值變量或表達式

? ? ??DEFAULT 關鍵字為可選項,用來設定參數的默認值。如果在調用存儲過程時不指明參數,則參數變量取默認值

? ? ??在存儲過程中,輸入變量接收主程序傳遞的值,但不能對其進行賦值。

2)參數名 OUT 數據類型;

? ? ??定義一個輸出參數變量,用于從存儲過程獲取數據,即變量從存儲過程中返回值給主程序。

? ? ? 在調用存儲過程時,主程序的實際參數只能是一個變量,而不能是常量或表達式。

? ? ??在存儲過程中,參數變量只能被賦值而不能將其用于賦值,而且必須給輸出變量至少賦值一次。

3)參數名 IN OUT 數據類型 DEFAULT 值;?

? ? ??定義一個輸入、輸出參數變量,兼有以上兩者的功能。

? ? ??在調用存儲過程時,主程序的實際參數只能是一個變量,而不能是常量或表達式。

? ? ??DEFAULT 關鍵字為可選項,用來設定參數的默認值。

? ? ??在存儲過程中,變量接收主程序傳遞的值,同時可以參加賦值運算,也可以對其進行賦值。在存儲過程中必須給變量至少賦值一次。

補充:如果省略IN、OUT或IN OUT,則默認模式是IN。?

? ? ? 調用它時參數個數與位置可以不一致,用以下形式調用:

EXECUTE CHANGE_SALARY(P_RAISE=80,P_EMPNO=7788); ?//=運算符左側是參數名,右側是參數表達式

二:函數

創建函數,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統權限

刪除函數,需要是函數的創建者或者是擁有DROP ANY PROCEDURE系統權限的人

修改函數,需要是函數的創建者或者擁有ALTER ANY PROCEDURE系統權限的人

執行函數,需要是函數的創建者或擁有EXECUTE ANY PROCEDURE系統權限的人

1:語法

1)創建:

CREATE[ORREPLACE]FUNCTION函數名[(參數[IN] 數據類型...)]

RETURN數據類型

{AS|IS}

[說明部分]

BEGIN

可執行部分

RETURN(表達式)

[EXCEPTION

錯誤處理部分]

END[函數名];

說明:

?參數是可選的,但只能是IN類型(IN關鍵字可以省略)。

?在定義部分的RETURN 數據類型,用來表示函數的數據類型,也就是返回值的類型,不可省略。

?在可執行部分的RETURN(表達式),用來生成函數的返回值,其表達式的類型應該和定義部分說明的函數返回值的數據類型一致。在函數的執行部分可以有多個RETURN語句,但只有一個RETURN語句會被執行,一旦執行了RETURN語句,則函數結束并返回調用環境。?

2)刪除

??DROP FUNCTION 函數名;

3)修改

??ALTER PROCEDURE 函數名 COMPILE;

4)執行

??變量名:=函數名(...)?

三:對存儲過程 和 函數的查看(可以通過對數據字典【USER_SOURCE】的訪問來查詢存儲過程或函數的有關信息)

1:查詢某個存儲過程序內容

select TEXT from user_source WHERE NAME='存儲過程名';

2:查看數據字殿

DESCRIBE USER_SOURCE ; //命令行中

3:查看存儲過程的參數

DESCRIBE say_hello; //后面是過程名

4:查看發生編輯錯誤

SHOW ERRORS ;

5:查詢一個存儲過程或函數是否是有效狀態(即編譯成功)

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='過程名';//注意大小寫

VALID表示該存儲過程有效(即通過編譯),INVALID表示存儲過程無效或需要重新編譯。它的狀態會改變,這與它依賴外部表(表刪除修改等操作)有關系

6:查看存儲過程與表的依賴關系

SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='SAY_HELLO';

說明

NAME為實體名,TYPE為實體類型,REFERENCED_OWNER為涉及到的實體擁有者賬戶,REFERENCED_NAME為涉及到的實體名,REFERENCED_TYPE 為涉及到的實體類型。

問題:

如果一個用戶A被授予執行屬于用戶B的一個存儲過程的權限,在用戶B的存儲過程中,訪問到用戶C的表,用戶B被授予訪問用戶C的表的權限,但用戶A沒有被授予訪問用戶C表的權限,那么用戶A調用用戶B的存儲過程是失敗的還是成功的呢?答案是成功的。


網頁名稱:oracle過程如何寫 oracle過程怎么執行
文章起源:http://m.jcarcd.cn/article/hgesgc.html
主站蜘蛛池模板: 99热6婷婷| 日韩一区二线视频 | 欧美性爱视频网 | 国产女主播福利资源 | 日本在线播放观看 | 91国语福利影院 | 国产办公室沙发系列 | 国产福利写真视 | 国产综合在线观看 | 国产在线观看免费 | 中文字幕无线免费 | 国产在线拍精品热 | 国产精品拍综合在线 | 日本熟女多毛性爱 | 国产欧美精 | 日本精品不卡视频 | 蜜桃在线观看 | 国产草草| 欧美日韩亚洲 | 精品亚洲成 | 92手机看片| 韩日国产一区二区 | www区一区二区三 | 日产国产欧洲系列 | 精品日韩一区 | 成人午夜视频 | 国产偷v国产偷v | 成人午夜影院网站 | 欧美日韩国产第1 | 欧美日韩国产精品 | 三区视频网站 | 欧美日女人b视频网 | 92手机看片| 韩国三级视频网站 | 九色蝌蚪熟女 | 成人国产第一区在 | 国产自产免费在线 | 日韩电影在线天堂 | 九九热国 | 日本精品在线播放 | 精品一区三区 |