declare
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比定日網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式定日網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋定日地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
in_begin_time varchar2(20); --定義起始時間
in_end_time varchar2(20);--定義結束時間
begin
in_begin_time :='2012-01-01 00:00:00';--起始時間賦值
in_end_time :='2012-01-01 12:00:00';--結束時間賦值
while in_begin_time in_end_time --判斷
loop --循環(huán)
dbms_output.put_line(in_begin_time||','||to_char(to_date(in_begin_time,'yyyy-mm-dd hh24:mi:ss')+1/24,'yyyy-mm-dd hh24:mi:ss')); --輸出結果
in_begin_time := to_char(to_date(in_begin_time,'yyyy-mm-dd hh24:mi:ss')+1/24,'yyyy-mm-dd hh24:mi:ss');
end loop;
end;
dbms_output.put_line(in_begin_time||','||to_char(to_date(in_begin_time,'yyyy-mm-dd hh24:mi:ss')+1/24,'yyyy-mm-dd hh24:mi:ss'));這個地方其實是輸出結果,當然這里可以調(diào)用那兩個參數(shù)當你select語句里的變量
存儲過程(procedure):是一個命名了的語句塊,可以有0個或多個參數(shù)
語法:
create or replace procedure HelloWorld
as
begin
dbms_output.put_line('HelloWorld');
end;
調(diào)用存儲過程
* 命令調(diào)用 exec helloworld
* 語句塊調(diào)用
begin
helloworld;
end;
/
DELETE:
create or replace procedure del_emp01
is
begin
delete from emp01 where empno=7369;
end;
exec del_emp01;
create or replace procedure del_emp01(v_empno in emp01.empno%type)
is
begin
delete from emp01 wherer empno=v_empno;
end;
exec del_emp01(7521);
INSERT
create or replace procedure ins_emp01
(v_empno emp01.empno%type,v_ename emp01.ename%type)
as
begin
insert into emp01(empno,ename) values(v_empno,v_ename);
end;
exec ins_emp01(1000,'李四');
UPDATE
create or replace procedure upd_emp01
(v_empno emp01.empno%type,v_ename emp01.ename%type)
as
begin
update emp01 set ename=v_ename where empno=v_empno;
end;
exec upd_emp01(1000,'張三');
SELECT
create or replace procedure sel_emp01
(v_empno emp01.empno%type,v_emp01_data out emp01%rowtype)
as
begin
select * into v_emp01_data from emp where empno=v_empno;
end;
帶有輸出參數(shù)的存儲過程不能使用命令直接調(diào)用
只能由語句塊或程序調(diào)用(JAVA) ****************************************************************
declare
v_emp_data emp01%rowtype;
begin
sel_emp01(7499,v_emp_data);
dbms_output.put_line(v_emp_data.ename||' '||v_emp_data.sal);
end;
調(diào)用:
declare
v_emp_data emp01%rowtype;
begin
sel_emp01(7499,v_emp_data);
dbms_output.put_line(v_emp_data.ename||' '||v_emp_data.sal);
end;
使用scott用戶登錄
統(tǒng)計某個部門的員工的工資總和,員工的人數(shù),平均工資,創(chuàng)建存儲過程
create or replace procedure deptcount
(v_deptno emp.deptno%type,v_sal_sum out number,v_recordes out number,v_avg_sal out number,errorMsg out varchar2)
is
begin
select sum(sal) into v_sal_sum from emp group by deptno having deptno=v_deptno;
select count(*) into v_recordes from emp group by deptno having deptno=v_deptno;
select avg(sal) into v_avg_sal from emp group by deptno having deptno=v_deptno;
exception
when no_data_found then
errorMsg:='沒有該部門';
end;
調(diào)用:
declare
v_sal_sum number;
v_recordes number;
v_avg_sal number(8,2);
v_errormsg varchar2(20);
begin
deptcount(90,v_sal_sum,v_recordes,v_avg_sal,v_errormsg);
dbms_output.put_line(v_sal_sum||' '||v_recordes||' '||v_avg_sal);
dbms_output.put_line(v_errormsg);
end;
//輸出參數(shù)
create or replace procedure my_pro(v_num in number,v_result out number)
is
v_temp number;
begin
v_temp:=0;
for i in 1..v_num
loop
v_temp:=v_temp+i;
end loop;
v_result:=v_temp;
end;
declare
v_recieve number;
begin
my_pro(100,v_recieve);
dbms_output.put_line(v_recieve);
end;
//既是輸入?yún)?shù)又是輸出參數(shù)
create or replace procedure my_pro1(v_i in out number)
is
v_j number;
begin
v_j:=30;
v_i:=v_i*v_j;
end;
declare
v_t number;
begin
v_t:=20;
my_pro1(v_t);
dbms_output.put_line(v_t);
end;
create or replace function pagesize(p_sql varchar2,pno number,pnosize number,pcount out number)
return sys_refcursor
as
v_sql varchar(2000);
ccount number;
tmpsql varchar2(2000);
cur_data sys_refcursor;
begin
v_sql:='select count(*) from ('||p_sql||') t';
tmpsql:='select * from (select rownum rowa,d.* from ('||p_sql||') d where rownum='||pno*pnosize||') where rowa'||(pno-1)*pnosize;
execute immediate v_sql into ccount;
pcount:=ceil(ccount/pnosize);
open cur_data for tmpsql;
return cur_data;
end;
這是一個分頁的存儲過程
寫循環(huán)的操作方法和步驟如下:
1、第一步,編寫存儲過程的整體結構,然后定義變量,見下圖。
2、其次,完成上述步驟后,在定義變量后定義游標,begin,select sysdate into v_date from dual,end test_proc,如下圖所示。
3、接著,完成上述步驟后,寫一個for循環(huán),游標開始for循環(huán),為臨時變量名任意起個名,輸出一個字段,使用變量名.列名就好了,最后游標for循環(huán)就結束了,如下圖所示。
4、最后,完成上述步驟后,試運行,單擊“
DBMS Output”選項卡進行檢查,運行成功,見下圖。這樣,問題就解決了。
Oracle存儲過程基本語法:CREATE OR REPLACE PROCEDURE 存儲過程名 IS BEGIN NULL; END;解釋:行1: CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle數(shù)據(jù)庫去創(chuàng)建一個叫做skeleton存儲過程, 如果存在就覆蓋它; 行2: IS關鍵詞表明后面將跟隨一個PL/SQL體。 行3: BEGIN關鍵詞表明PL/SQL體的開始。 行4: NULL PL/SQL語句表明什么事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句; 行5: END關鍵詞表明PL/SQL體的結束。