一。 概述Oracle存儲(chǔ)過程開發(fā)的要點(diǎn)是:
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè),重慶APP軟件開發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。創(chuàng)新互聯(lián)深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
1; 使用Notepad文本編輯器,用Oracle PL/SQL編程語言寫一個(gè)存儲(chǔ)過程;
2; 在Oracle數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)存儲(chǔ)過程;
3; 在Oracle數(shù)據(jù)庫(kù)中使用SQL*Plus工具運(yùn)行存儲(chǔ)過程;
4; 在Oracle數(shù)據(jù)庫(kù)中修改存儲(chǔ)過程;
5; 通過編譯錯(cuò)誤調(diào)試存儲(chǔ)過程;
6; 刪除存儲(chǔ)過程;二。環(huán)境配置
包括以下內(nèi)容:
1; 一個(gè)文本編輯器Notepad;
2; Oracle SQL*Plus工具,提交Oracle SQL和PL/SQL 語句到Oracle database。
3; Oracle 10g express數(shù)據(jù)庫(kù),它是免費(fèi)使用的版本;
需要的技巧:
4; SQL基礎(chǔ)知識(shí),包括插入、修改、刪除等
5; 使用Oracle's SQL*Plus工具的基本技巧;
6; 使用Oracle's PL/SQL 編程語言的基本技巧;三。寫一個(gè)存儲(chǔ)過程
在Notepad, 寫下:
CREATE OR REPLACE PROCEDURE skeletonISBEGINNULL;END;把文件存為skeleton.sql.
讓我們一行行遍歷這個(gè)存儲(chǔ)過程:
1 CREATE OR REPLACE PROCEDURE skeleton2 IS3 BEGIN
4 NULL;5 END;行1:CREATE OR REPLACE PROCEDURE 是一個(gè)SQL語句通知Oracle數(shù)據(jù)庫(kù)去創(chuàng)建一個(gè)叫做skeleton存儲(chǔ)過程, 如果存在就覆蓋它;行2:IS關(guān)鍵詞表明后面將跟隨一個(gè)PL/SQL體。
行3:BEGIN關(guān)鍵詞表明PL/SQL 體的開始。
四。創(chuàng)建一個(gè)存儲(chǔ)過程
SQL語句CREATE OR REPLACE PROCEDURE在Oracle數(shù)據(jù)庫(kù)中創(chuàng)建、編譯和保存一個(gè)存儲(chǔ)過程。
從Window打開SQL*Plus并且從SQL*Plus 登錄到你的數(shù)據(jù)庫(kù);打開skeleton.sql文件。
在SQL命令提示符下輸入以下命令:
SQL@skeletonSQL/SQL*Plus裝載skeleton.sql文件的內(nèi)容到 SQL*Plus緩沖區(qū)并且執(zhí)行SQL*Plus語句;SQL*Plus 會(huì)通知你存儲(chǔ)過程已經(jīng)被成功地創(chuàng)建。
sqlplus或者PL/SQL
SQL窗口
輸入(單獨(dú)調(diào)用存儲(chǔ)過程):
無參數(shù)
EXEC
過程名;
或者
BEGIN
過程名
END;
IN
參數(shù)
EXEC
過程名(入?yún)?shù)..);
或者
BEGIN
過程名(入?yún)?shù)...)
END;
OUT參數(shù),IN
OUT參數(shù)
variable
綁定變量名
數(shù)據(jù)類型;
//定義一個(gè)變量接收出參數(shù)的值;
EXEC
過程名(:綁定變量名);
具體如下:
1、第一步,創(chuàng)建一個(gè)新的存儲(chǔ)過程,見下圖,轉(zhuǎn)到下面的步驟。
2、第二步,完成上述步驟后,修改存儲(chǔ)過程。
此存儲(chǔ)過程具有一個(gè)輸入?yún)?shù)(pid)和一個(gè)輸出參數(shù),即通過用戶id查詢用戶名并返回名稱,見下圖,轉(zhuǎn)到下面的步驟。
3、第三步,完成上述步驟后,調(diào)試存儲(chǔ)過程,找到新創(chuàng)建的存儲(chǔ)過程,右鍵單擊[test]按鈕,見下圖,轉(zhuǎn)到下面的步驟。
4、第四步,完成上述步驟后,修改id值,然后單擊左上角的“倒三角”按鈕以開始調(diào)試,見下圖,轉(zhuǎn)到下面的步驟。
5、第五步,完成上述步驟后,按[CTRL +
N]進(jìn)行單步調(diào)試,按[CTRL + O]單步調(diào)試,按[CTRL + T]退出調(diào)試,或者單擊調(diào)試工具進(jìn)行調(diào)試,見下圖,轉(zhuǎn)到下面的步驟。
6、第六步,完成上述步驟后,可以在窗口底部輸入變量名稱,以觀察變量的變化,見下圖,轉(zhuǎn)到下面的步驟。
7、第七步,完成上述步驟后,可以查看調(diào)試結(jié)果,見下圖。這樣,就解決了這個(gè)問題了。
用job
oracle定時(shí)器調(diào)用存儲(chǔ)過程
1、創(chuàng)建一個(gè)表,為了能清楚看到定時(shí)器的運(yùn)行情況我們創(chuàng)建一個(gè)帶有日期字段的表
Sql代碼 ?
create table job_table(run_time date); ?
create table job_table(run_time date);
2、創(chuàng)建存儲(chǔ)過程
Sql代碼 ?
create or replace procedure job_proc is ?
begin
insert into job_table (run_time) values (sysdate); ?
end; ?
create or replace procedure job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
3、創(chuàng)建job,并且指定為一分鐘執(zhí)行一次
Sql代碼 ?
declare
job number; ?
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)'); ?
end/ ?
commit; ?
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.創(chuàng)建之后自動(dòng)處于運(yùn)行狀態(tài),我們查詢job表,看看我們創(chuàng)建的job
Sql代碼 ?
select job,broken,what,interval,t.* from user_jobs t; ?
select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...
用job
oracle定時(shí)器調(diào)用存儲(chǔ)過程
創(chuàng)建一個(gè)表,為了能清楚看到定時(shí)器的運(yùn)行情況我們創(chuàng)建一個(gè)帶有日期字段的表
Sql代碼 ?
create table job_table(run_time date); ?
create table job_table(run_time date);
2.創(chuàng)建存儲(chǔ)過程
Sql代碼 ?
create or replace procedure job_proc is ?
begin
insert into job_table (run_time) values (sysdate); ?
end; ?
create or replace procedure job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
3.創(chuàng)建job,并且指定為一分鐘執(zhí)行一次
Sql代碼 ?
declare
job number; ?
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)'); ?
end/ ?
commit; ?
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.創(chuàng)建之后自動(dòng)處于運(yùn)行狀態(tài),我們查詢job表,看看我們創(chuàng)建的job
Sql代碼 ?
select job,broken,what,interval,t.* from user_jobs t; ?
select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...