oracle中的procedure編寫和使用詳解
1.創(chuàng)建/修改
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_list)]
{IS|AS}
[local_declarations]
BEGIN
executable_statements
[EXCEPTION exception_handlers]
END [procedure_name];
a.parameter_list格式如下
parameter_name1 [in | out | in out] type, parameter_name1 [in | out] type [,........]
in 是輸入?yún)?shù), 可以有默認(rèn)值,默認(rèn)值例子 emp_no in number:=7900
out 是輸出參數(shù),
b.AS/IS的區(qū)別
在視圖(VIEW)中只能用AS不能用IS
在游標(biāo)(CURSOR)中只能用IS不能用AS
c.local_declarations格式如下:
loacal_var1 type(limit);
如empname varchar2(20);
d.輸出變量賦值
oracle 變量賦值有兩種一種是直接 := 還有就是 select into
游標(biāo)參數(shù)
outcur OUT BASIC_CURSOR: OPEN outcur FOR SELECT col1,col2 FROM tablename
e.示例
create or replace procedure putNum(P_Date in date, P_year out varchar2) is
v_num number(8) := 1;
v_days number;
v_date date;
begin
dbms_output.put_line('intput value:' || P_year);
v_num := 1;
v_days := 1;
v_days := to_number(to_char(P_Date, 'dd')); -- to_char(sysdate-20,'dd')
for i in 1 .. v_days Loop
v_date := to_date('2011/11/' || to_char(i), 'yyyy/MM/dd');
--dbms_output.put_line(v_date);
end loop;
P_year := '2012';
end;
2.調(diào)用
[EXECUTE]|[CALL] procedure_name[(parameter,…n)]
在代碼塊 declare 的 begin/end 中不需要 [EXECUTE]|[CALL], 直接 procedure_name[(parameter,…n)]
其他外部程序需要 [EXECUTE]|[CALL]
在PL/SQL中調(diào)用這個(gè)存儲(chǔ)過程,采用了如下的代碼:
begin
Proc_Insert('hello6',25,'2005-12-24');
commit;
end;
3.顯示調(diào)試信息
a.存儲(chǔ)過程中在必要的位置添加
DBMS_OUTPUT.put_line ('Hello World!');
b.打開DBMS_OUTPUT
show serveroutput; set serveroutput on;
c.測(cè)試我們的 procedure
exec procedure_name
3.顯示錯(cuò)誤 show errors
如果在 exec 存儲(chǔ)過程中提示出現(xiàn)錯(cuò)誤,時(shí)刻使用"show errors"命令查看哪里出錯(cuò)了
4.查看
a.所有 procedure
select object_name,object_type,status from user_objects where OBJECT_TYPE='PROCEDURE';
b.指定 procedure
SELECT text FROM user_source WHERE NAME = 'procedure_name';
5.刪除
DROP PROCEDURE procedure_name;
以上所述是小編給大家介紹的oracle中的procedure編寫和使用詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Oracle數(shù)據(jù)回退的實(shí)現(xiàn)
在使用plsql工具,對(duì)表數(shù)據(jù)進(jìn)行操作后,提交了事務(wù),發(fā)現(xiàn)數(shù)據(jù)更新或者刪除錯(cuò)了,這時(shí)候還是有方法可以把數(shù)據(jù)回退的,本文就詳細(xì)的介紹此方法,感興趣的可以了解一下2023-08-08
優(yōu)化Oracle停機(jī)時(shí)間及數(shù)據(jù)庫恢復(fù)
優(yōu)化Oracle停機(jī)時(shí)間及數(shù)據(jù)庫恢復(fù)...2007-03-03
Oracle 低權(quán)限數(shù)據(jù)庫賬戶得到 OS 訪問權(quán)限 提權(quán)利用
大概意思就是說,如果 ORACLE 服務(wù)是用 administrator 賬戶啟動(dòng)的,你只要有一個(gè)具有 resource 和 connect 權(quán)限的數(shù)據(jù)庫賬戶,就能利用 metasploit 的 smbrelay 功能,本地搭建一個(gè) SMB 欺騙服務(wù)器, 來得到系統(tǒng)的訪問權(quán)限。2009-06-06
Oracle?exadata存儲(chǔ)節(jié)點(diǎn)更換內(nèi)存操作及報(bào)錯(cuò)處理方法
在進(jìn)行Oracle?Exadata巡檢時(shí),發(fā)現(xiàn)cell節(jié)點(diǎn)內(nèi)存報(bào)錯(cuò),需確認(rèn)內(nèi)存PN號(hào)及大小,并更換備件,這篇文章主要介紹了Oracle?exadata存儲(chǔ)節(jié)點(diǎn)更換內(nèi)存操作及報(bào)錯(cuò)處理的相關(guān)資料,需要的朋友可以參考下2024-10-10
Oracle中PL/SQL復(fù)合數(shù)據(jù)類型
這篇文章介紹了Oracle中PL/SQL的復(fù)合數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
Oracle數(shù)據(jù)庫統(tǒng)計(jì)信息方法詳解
這篇文章主要介紹了如何查看和收集Oracle數(shù)據(jù)庫中的統(tǒng)計(jì)信息,包括表、索引和列的統(tǒng)計(jì)信息,介紹了DBMS_STATS包的功能和使用方法,以及如何通過分析和刪除統(tǒng)計(jì)信息來優(yōu)化數(shù)據(jù)庫性能,需要的朋友可以參考下2024-12-12
ORACLE中查找定位表最后DML操作的時(shí)間小結(jié)
在Oracle數(shù)據(jù)庫中,如何查找,定位一張表最后一次的DML操作的時(shí)間呢? 方式有三種,不過都有一些局限性,下面簡(jiǎn)單的解析、總結(jié)一下。感興趣的朋友跟隨小編一起看看吧2018-11-11
oracle復(fù)習(xí)筆記之PL/SQL程序所要了解的知識(shí)點(diǎn)
本文主要是前篇文章的續(xù)篇,主要來復(fù)習(xí)PL/SQL的基本語法、記錄類型、流程控制、游標(biāo)的使用、異常處理機(jī)制、存儲(chǔ)函數(shù)/存儲(chǔ)過程、觸發(fā)器。好記性不如爛筆頭,古人誠(chéng)不欺我~2014-08-08
oracle如何使用java source調(diào)用外部程序
這篇文章主要為大家介紹了oracle如何使用java source調(diào)用外部程序,感興趣的小伙伴們可以參考一下2016-09-09
簡(jiǎn)析Oracle數(shù)據(jù)庫常見問題及解決方案
這篇文章主要介紹了Oracle數(shù)據(jù)庫常見問題及解決方案,總結(jié)了一些在Oracle數(shù)據(jù)庫使用過程中的常見問題,并對(duì)其進(jìn)行了分析,給出了解決方案,需要的朋友可以參考下2015-08-08

