真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle怎么創(chuàng)建存儲(chǔ),oracle怎么保存

oracle存儲(chǔ)過(guò)程基本語(yǔ)法

一:存儲(chǔ)過(guò)程

作為一家“創(chuàng)意+整合+營(yíng)銷(xiāo)”的成都網(wǎng)站建設(shè)機(jī)構(gòu),我們?cè)跇I(yè)內(nèi)良好的客戶(hù)口碑。成都創(chuàng)新互聯(lián)公司提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、創(chuàng)意表現(xiàn)、網(wǎng)頁(yè)制作、系統(tǒng)開(kāi)發(fā)以及后續(xù)網(wǎng)站營(yíng)銷(xiāo)運(yùn)營(yíng)等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營(yíng)模式與有效的網(wǎng)絡(luò)營(yíng)銷(xiāo)方法,創(chuàng)造更大的價(jià)值。

創(chuàng)建存儲(chǔ)過(guò)程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統(tǒng)權(quán)限? ?

刪除存儲(chǔ)過(guò)程,是過(guò)程的創(chuàng)建者或者擁有DROP ANY PROCEDURE系統(tǒng)權(quán)限?

修改存儲(chǔ)過(guò)程,則只能是過(guò)程的創(chuàng)建者或者擁有ALTER ANY PROCEDURE系統(tǒng)權(quán)限的人

執(zhí)行(或調(diào)用)存儲(chǔ)過(guò)程,是過(guò)程的創(chuàng)建者或是擁有EXECUTE ANY PROCEDURE系統(tǒng)權(quán)限的人或是被擁有者授予EXECUTE權(quán)限的人

1:語(yǔ)法

1)創(chuàng)建

CREATE[ORREPLACE]PROCEDURE存儲(chǔ)過(guò)程名[(參數(shù)[IN|OUT|INOUT] 數(shù)據(jù)類(lèi)型...)]

{AS|IS}

[說(shuō)明部分]

BEGIN

可執(zhí)行部分

[EXCEPTION

錯(cuò)誤處理部分]

END[過(guò)程名];

說(shuō)明:

OR REPLACE?表示如果存在就覆蓋存儲(chǔ)過(guò)程

參數(shù)有三種形式:IN、OUT和IN OUT。則默認(rèn)為IN。

關(guān)鍵字AS也可以寫(xiě)成IS,后跟過(guò)程的說(shuō)明部分,可以在此定義過(guò)程的局部變量。

2)刪除存儲(chǔ)過(guò)程:

DROP PROCEDURE 存儲(chǔ)過(guò)程名;

3)修改存儲(chǔ)過(guò)程:

? ALTER PROCEDURE 存儲(chǔ)過(guò)程名 COMPILE;?

4)執(zhí)行存儲(chǔ)過(guò)程

??EXECUTE 模式名.存儲(chǔ)過(guò)程名[(參數(shù)...)];?

?或

? ?BEGIN?

模式名.存儲(chǔ)過(guò)程名[(參數(shù)...)];

END;

另外:參數(shù)可以是變量、常量或表達(dá)式

要其它用戶(hù)執(zhí)行存儲(chǔ)過(guò)程須要給其它用戶(hù)授權(quán)

GRANT EXECUTE ON 存儲(chǔ)過(guò)程名 TO 用戶(hù)名

2:參數(shù)說(shuō)明

IN 定義一個(gè)輸入?yún)?shù)變量,用于傳遞參數(shù)給存儲(chǔ)過(guò)程

OUT 定義一個(gè)輸出參數(shù)變量,用于從存儲(chǔ)過(guò)程獲取數(shù)據(jù)

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

1)參數(shù)名 IN 數(shù)據(jù)類(lèi)型 DEFAULT 值;

? ? ??定義一個(gè)輸入?yún)?shù)變量,用于傳遞參數(shù)給存儲(chǔ)過(guò)程。

? ? ??可以是常量、有值變量或表達(dá)式

? ? ??DEFAULT 關(guān)鍵字為可選項(xiàng),用來(lái)設(shè)定參數(shù)的默認(rèn)值。如果在調(diào)用存儲(chǔ)過(guò)程時(shí)不指明參數(shù),則參數(shù)變量取默認(rèn)值

? ? ??在存儲(chǔ)過(guò)程中,輸入變量接收主程序傳遞的值,但不能對(duì)其進(jìn)行賦值。

2)參數(shù)名 OUT 數(shù)據(jù)類(lèi)型;

? ? ??定義一個(gè)輸出參數(shù)變量,用于從存儲(chǔ)過(guò)程獲取數(shù)據(jù),即變量從存儲(chǔ)過(guò)程中返回值給主程序。

? ? ? 在調(diào)用存儲(chǔ)過(guò)程時(shí),主程序的實(shí)際參數(shù)只能是一個(gè)變量,而不能是常量或表達(dá)式。

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

3)參數(shù)名 IN OUT 數(shù)據(jù)類(lèi)型 DEFAULT 值;?

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

? ? ??在調(diào)用存儲(chǔ)過(guò)程時(shí),主程序的實(shí)際參數(shù)只能是一個(gè)變量,而不能是常量或表達(dá)式。

? ? ??DEFAULT 關(guān)鍵字為可選項(xiàng),用來(lái)設(shè)定參數(shù)的默認(rèn)值。

? ? ??在存儲(chǔ)過(guò)程中,變量接收主程序傳遞的值,同時(shí)可以參加賦值運(yùn)算,也可以對(duì)其進(jìn)行賦值。在存儲(chǔ)過(guò)程中必須給變量至少賦值一次。

補(bǔ)充:如果省略IN、OUT或IN OUT,則默認(rèn)模式是IN。?

? ? ? 調(diào)用它時(shí)參數(shù)個(gè)數(shù)與位置可以不一致,用以下形式調(diào)用:

EXECUTE CHANGE_SALARY(P_RAISE=80,P_EMPNO=7788); ?//=運(yùn)算符左側(cè)是參數(shù)名,右側(cè)是參數(shù)表達(dá)式

二:函數(shù)

創(chuàng)建函數(shù),需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統(tǒng)權(quán)限

刪除函數(shù),需要是函數(shù)的創(chuàng)建者或者是擁有DROP ANY PROCEDURE系統(tǒng)權(quán)限的人

修改函數(shù),需要是函數(shù)的創(chuàng)建者或者擁有ALTER ANY PROCEDURE系統(tǒng)權(quán)限的人

執(zhí)行函數(shù),需要是函數(shù)的創(chuàng)建者或擁有EXECUTE ANY PROCEDURE系統(tǒng)權(quán)限的人

1:語(yǔ)法

1)創(chuàng)建:

CREATE[ORREPLACE]FUNCTION函數(shù)名[(參數(shù)[IN] 數(shù)據(jù)類(lèi)型...)]

RETURN數(shù)據(jù)類(lèi)型

{AS|IS}

[說(shuō)明部分]

BEGIN

可執(zhí)行部分

RETURN(表達(dá)式)

[EXCEPTION

錯(cuò)誤處理部分]

END[函數(shù)名];

說(shuō)明:

?參數(shù)是可選的,但只能是IN類(lèi)型(IN關(guān)鍵字可以省略)。

?在定義部分的RETURN 數(shù)據(jù)類(lèi)型,用來(lái)表示函數(shù)的數(shù)據(jù)類(lèi)型,也就是返回值的類(lèi)型,不可省略。

?在可執(zhí)行部分的RETURN(表達(dá)式),用來(lái)生成函數(shù)的返回值,其表達(dá)式的類(lèi)型應(yīng)該和定義部分說(shuō)明的函數(shù)返回值的數(shù)據(jù)類(lèi)型一致。在函數(shù)的執(zhí)行部分可以有多個(gè)RETURN語(yǔ)句,但只有一個(gè)RETURN語(yǔ)句會(huì)被執(zhí)行,一旦執(zhí)行了RETURN語(yǔ)句,則函數(shù)結(jié)束并返回調(diào)用環(huán)境。?

2)刪除

??DROP FUNCTION 函數(shù)名;

3)修改

??ALTER PROCEDURE 函數(shù)名 COMPILE;

4)執(zhí)行

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

三:對(duì)存儲(chǔ)過(guò)程 和 函數(shù)的查看(可以通過(guò)對(duì)數(shù)據(jù)字典【USER_SOURCE】的訪(fǎng)問(wèn)來(lái)查詢(xún)存儲(chǔ)過(guò)程或函數(shù)的有關(guān)信息)

1:查詢(xún)某個(gè)存儲(chǔ)過(guò)程序內(nèi)容

select TEXT from user_source WHERE NAME='存儲(chǔ)過(guò)程名';

2:查看數(shù)據(jù)字殿

DESCRIBE USER_SOURCE ; //命令行中

3:查看存儲(chǔ)過(guò)程的參數(shù)

DESCRIBE say_hello; //后面是過(guò)程名

4:查看發(fā)生編輯錯(cuò)誤

SHOW ERRORS ;

5:查詢(xún)一個(gè)存儲(chǔ)過(guò)程或函數(shù)是否是有效狀態(tài)(即編譯成功)

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='過(guò)程名';//注意大小寫(xiě)

VALID表示該存儲(chǔ)過(guò)程有效(即通過(guò)編譯),INVALID表示存儲(chǔ)過(guò)程無(wú)效或需要重新編譯。它的狀態(tài)會(huì)改變,這與它依賴(lài)外部表(表刪除修改等操作)有關(guān)系

6:查看存儲(chǔ)過(guò)程與表的依賴(lài)關(guān)系

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

說(shuō)明

NAME為實(shí)體名,TYPE為實(shí)體類(lèi)型,REFERENCED_OWNER為涉及到的實(shí)體擁有者賬戶(hù),REFERENCED_NAME為涉及到的實(shí)體名,REFERENCED_TYPE 為涉及到的實(shí)體類(lèi)型。

問(wèn)題:

如果一個(gè)用戶(hù)A被授予執(zhí)行屬于用戶(hù)B的一個(gè)存儲(chǔ)過(guò)程的權(quán)限,在用戶(hù)B的存儲(chǔ)過(guò)程中,訪(fǎng)問(wèn)到用戶(hù)C的表,用戶(hù)B被授予訪(fǎng)問(wèn)用戶(hù)C的表的權(quán)限,但用戶(hù)A沒(méi)有被授予訪(fǎng)問(wèn)用戶(hù)C表的權(quán)限,那么用戶(hù)A調(diào)用用戶(hù)B的存儲(chǔ)過(guò)程是失敗的還是成功的呢?答案是成功的。

107 ORACLE 創(chuàng)建存儲(chǔ)過(guò)程,存儲(chǔ)函數(shù)

基本概念

存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)相當(dāng)于一個(gè)東西。

存儲(chǔ)過(guò)程在Oracle里叫procedure。

存儲(chǔ)過(guò)程沒(méi)有返回值。

存儲(chǔ)函數(shù)在Oracle里叫function。

存儲(chǔ)函數(shù)有返回值。

基本語(yǔ)法

create or replace procedure 名字

--create or replace 意思是創(chuàng)建或者替換

as

--可以在此定義參數(shù)

begin

語(yǔ)句;

end;

例:

create? or? replace ? procedure ? sayhello

as

--說(shuō)明 相當(dāng)與declare

begin

dbms_output.put_line('Hello World');

end;

基本調(diào)用

begin

-- Call the procedure

sayhello;

sayhello;

sayhello;

end;

帶參數(shù)的存儲(chǔ)過(guò)程--查詢(xún)某個(gè)員工的年收入

create or replace procedure upmoney(testname in test_procedure.name%type)?

as

begin?

update test_procedure t set t.money = t.money + 1000

where t.name = testname;?

end?

upmoney;

特別的地方,參數(shù)要指明是輸入?yún)?shù)還是輸出參數(shù)。

存儲(chǔ)函數(shù)

create or replace function Fupmoney(tname in varchar2) ?? return number

as ? ? --定義月薪參數(shù)

tmoney test_procedure.money%type;

begin

--得到月薪

select t.money

into tmoney

from test_procedure t

where t.name = tname;

dbms_output.put_line(tmoney*12);

return(tmoney*12);

end;

創(chuàng)建一個(gè)多輸出參數(shù)的存儲(chǔ)函數(shù)例子

create or replace procedure manyparm(tname in varchar2,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tjob out varchar2,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tmoney out number,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tdept out varchar2)

is

begin

select t.job,t.money,t.dept

? into tjob,tmoney,tdept

? from test_procedure t

? where t.name = tname;

end manyparm;

Oracle下怎樣創(chuàng)建存儲(chǔ)過(guò)程

給你示例你參考下:

----------------------------建立存儲(chǔ)過(guò)程:

CREATE OR REPLACE PROCEDURE P_name--存儲(chǔ)過(guò)程名字

(

i_var in int, --輸入?yún)?shù)1

o_var OUT varchar2 --輸出參數(shù)1

)

IS

v_STR VARCHAR2(200); --定義存儲(chǔ)過(guò)程內(nèi)部的局部變量

BEGIN

--下面是存儲(chǔ)過(guò)程的主體實(shí)現(xiàn)部分

v_STR := i_var;

dbms_output.put_line(v_STR);

o_var := v_STR;

exception--錯(cuò)誤異常處理部分

when others then

dbms_output.put_line(sqlerrm);--打印錯(cuò)誤信息

END P_name;

-----------------------------------調(diào)用存儲(chǔ)過(guò)程示例:

declare

v_in int;

v_out varchar2(50);

begin

v_in :=100;

P_name (v_in,v_out); --調(diào)用存儲(chǔ)過(guò)程P_name

dbms_output.put_line('存儲(chǔ)過(guò)程輸入結(jié)果為:'||v_out);

exception--錯(cuò)誤異常處理部分

when others then

dbms_output.put_line(sqlerrm);--打印錯(cuò)誤信息

end;


分享標(biāo)題:oracle怎么創(chuàng)建存儲(chǔ),oracle怎么保存
地址分享:http://weahome.cn/article/hspohs.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部