DECLARE v_value VARCHAR2(100); --聲明一個變量,用來存放返回的值BEGINP_MES_SB_JBEffectCheck('2010-01','2010-10',v_value); --執(zhí)行存儲過程P_MES_SB_JBEffectCheck,該存儲過程接收2個時間值的參數(shù),返回一個varchar類型的值END;注:Oracle存儲過程不能返回一張表結(jié)構(gòu),所以在存儲過程里執(zhí)行select 語句的時候,需要把查詢的結(jié)果insert到一張表里,或者用一個變量來保存查詢結(jié)果(此時查詢結(jié)果必須是一行一列的值)
成都創(chuàng)新互聯(lián)公司服務(wù)項目包括青銅峽網(wǎng)站建設(shè)、青銅峽網(wǎng)站制作、青銅峽網(wǎng)頁制作以及青銅峽網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,青銅峽網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到青銅峽省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
sqlplus或者PL/SQL
SQL窗口
輸入(單獨調(diào)用存儲過程):
無參數(shù)
EXEC
過程名;
或者
BEGIN
過程名
END;
IN
參數(shù)
EXEC
過程名(入?yún)?shù)..);
或者
BEGIN
過程名(入?yún)?shù)...)
END;
OUT參數(shù),IN
OUT參數(shù)
variable
綁定變量名
數(shù)據(jù)類型;
//定義一個變量接收出參數(shù)的值;
EXEC
過程名(:綁定變量名);
一。 概述Oracle存儲過程開發(fā)的要點是:
1; 使用Notepad文本編輯器,用Oracle PL/SQL編程語言寫一個存儲過程;
2; 在Oracle數(shù)據(jù)庫中創(chuàng)建一個存儲過程;
3; 在Oracle數(shù)據(jù)庫中使用SQL*Plus工具運行存儲過程;
4; 在Oracle數(shù)據(jù)庫中修改存儲過程;
5; 通過編譯錯誤調(diào)試存儲過程;
6; 刪除存儲過程;二。環(huán)境配置
包括以下內(nèi)容:
1; 一個文本編輯器Notepad;
2; Oracle SQL*Plus工具,提交Oracle SQL和PL/SQL 語句到Oracle database。
3; Oracle 10g express數(shù)據(jù)庫,它是免費使用的版本;
需要的技巧:
4; SQL基礎(chǔ)知識,包括插入、修改、刪除等
5; 使用Oracle's SQL*Plus工具的基本技巧;
6; 使用Oracle's PL/SQL 編程語言的基本技巧;三。寫一個存儲過程
在Notepad, 寫下:
CREATE OR REPLACE PROCEDURE skeletonISBEGINNULL;END;把文件存為skeleton.sql.
讓我們一行行遍歷這個存儲過程:
1 CREATE OR REPLACE PROCEDURE skeleton2 IS3 BEGIN
4 NULL;5 END;行1:CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle數(shù)據(jù)庫去創(chuàng)建一個叫做skeleton存儲過程, 如果存在就覆蓋它;行2:IS關(guān)鍵詞表明后面將跟隨一個PL/SQL體。
行3:BEGIN關(guān)鍵詞表明PL/SQL 體的開始。
四。創(chuàng)建一個存儲過程
SQL語句CREATE OR REPLACE PROCEDURE在Oracle數(shù)據(jù)庫中創(chuàng)建、編譯和保存一個存儲過程。
從Window打開SQL*Plus并且從SQL*Plus 登錄到你的數(shù)據(jù)庫;打開skeleton.sql文件。
在SQL命令提示符下輸入以下命令:
SQL@skeletonSQL/SQL*Plus裝載skeleton.sql文件的內(nèi)容到 SQL*Plus緩沖區(qū)并且執(zhí)行SQL*Plus語句;SQL*Plus 會通知你存儲過程已經(jīng)被成功地創(chuàng)建。
使用oracle調(diào)用存儲過程得方式和plsql不一樣,下面給你個調(diào)用例子
過程調(diào)用方式一
declare
realsal emp.sal%type;
realname varchar(40);
realjob varchar(40);
begin //存儲過程調(diào)用開始
realsal:=1100;
realname:='';
realjob:='CLERK';
runbyparmeters(realsal,realname,realjob); --必須按順序
DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB);
END; //過程調(diào)用結(jié)束
過程調(diào)用方式二
declare
realsal emp.sal%type;
realname varchar(40);
realjob varchar(40);
begin //過程調(diào)用開始
realsal:=1100;
realname:='';
realjob:='CLERK';
runbyparmeters(sname=realname,isal=realsal,sjob=realjob); --指定值對應(yīng)變量順序可變
DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB);
END; //過程調(diào)用結(jié)束
調(diào)用oracle存儲過程用begin...end的方式。
基本語法:
begin
存儲過程名(參數(shù)1,參數(shù)2……);--如果無參數(shù)則省略括號及括號內(nèi)部分end;
如,有存儲過程:
create
or
replace
procedure
p_testasv_begintime
varchar2(20);v_endtime
varchar2(20);v_str
varchar2(10);begin
v_begintime:=to_char(sysdate,'yyyy-mm-dd
hh24:mi:ss');
select
'badkano'
into
v_str
from
dual;
v_endtime:=to_char(sysdate,'yyyy-mm-dd
hh24:mi:ss');
dbms_output.put_line('開始時間為:'||v_begintime);
dbms_output.put_line('結(jié)束時間為:'||v_endtime);end;
執(zhí)行:begin
p_test;end;
用job
oracle定時器調(diào)用存儲過程
1、創(chuàng)建一個表,為了能清楚看到定時器的運行情況我們創(chuàng)建一個帶有日期字段的表
Sql代碼 ?
create table job_table(run_time date); ?
create table job_table(run_time date);
2、創(chuàng)建存儲過程
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)建之后自動處于運行狀態(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定時器調(diào)用存儲過程
創(chuàng)建一個表,為了能清楚看到定時器的運行情況我們創(chuàng)建一個帶有日期字段的表
Sql代碼 ?
create table job_table(run_time date); ?
create table job_table(run_time date);
2.創(chuàng)建存儲過程
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)建之后自動處于運行狀態(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) ...