Oracle儲存過程詳解 三 巢狀

2021-08-15 08:16:20 字數 3270 閱讀 3695

-- created on

2016/4/22

by administrator

declare

p_dname varchar2(50) := '微軟';

p_deptno number := 60;

p_deptloc varchar2(100) := '公尺國';

v_state varchar2(50);--狀態

begin

--內部巢狀塊

《查詢是否存在》

begin

select dname into v_state from dept where deptno = p_deptno;

dbms_output.put_line('部門名:' || v_state) ;

end;

--內部巢狀塊(可訪問外部變數,但外部不能訪問內部變數)

《更新部門資訊》

declare

begin

update dept set dname = p_dname,loc = p_deptloc where deptno = p_deptno ;

dbms_output.put_line('更新部門資訊成功') ;

end;

--處理異常

exception

when no_data_found then

dbms_output.put_line('未找到部門,新建...:') ;

--內部巢狀塊

《插入乙個新部門》

declare

begin

insert into dept(deptno,dname,loc) values(p_deptno,p_dname,p_deptloc);

dbms_output.put_line('新建部門成功') ;

exception

when others then

dbms_output.put_line('此過程徹底失敗') ;

end;

--rollback;

end;

declare 

v_number1 number;

v_number2 number;

begin

--進行外部迴圈

for v_number1 in

1 .. 9

loop

--進行內部迴圈

for v_number2 in

1 .. v_number1

loop

--列印九九乘法口決表

dbms_output.put(v_number1

|| '*'

||v_number2

||'='

||v_number1*v_number2

||' ');

endloop;

dbms_output.put_line('');

endloop;

dbms_output.put_line('*****完成*****====');

end;

結果:

1

*1=1

2*1=2

2*2=4

3*1=3

3*2=6

3*3=9

4*1=4

4*2=8

4*3=12

4*4=16

5*1=5

5*2=10

5*3=15

5*4=20

5*5=25

6*1=6

6*2=12

6*3=18

6*4=24

6*5=30

6*6=36

7*1=7

7*2=14

7*3=21

7*4=28

7*5=35

7*6=42

7*7=49

8*1=8

8*2=16

8*3=24

8*4=32

8*5=40

8*6=48

8*7=56

8*8=64

9*1=9

9*2=18

9*3=27

9*4=36

9*5=45

9*6=54

9*7=63

9*8=72

9*9=81

*****完成*****====

declare 

sqlstr varchar2(200);

v_empno number := 7902;

begin

《一條普通查詢》

begin

--定義sql語句

sqlstr := 'select * from emp';

--執行上面這名sql

execute immediate sqlstr;

dbms_output.put_line('第一條成功!');

exception

when

others

then

null;

end;

《傳值和返回值的查詢》

declare

v_ename varchar2(50);

v_job varchar2(50);

v_sal number;

begin

--定義sql語句

sqlstr := 'select ename,job,sal from emp where empno = :tempid ';

--執行上面這名sql,並傳值我取返回值

execute immediate sqlstr

into v_ename,v_job,v_sal

using v_empno;

dbms_output.put_line('工號:'||v_empno||'名字:'||v_ename||'職位:'||v_job||'工資:'||v_sal);

exception

when

others

then

null;

end;

dbms_output.put_line('*****完成*****====');

end;

結果:

第一條成功!

工號:7902名字:ford職位:analyst工資:

3000

*****完成*****====

oracle 儲存過程 游標巢狀

這是一段將裝置的gps資料的工作小時數進行統計的儲存過程,首先通過游標取出所有裝置資訊,然後對每一台裝置進行工作小時數統計,其中用到了游標巢狀 create or replace procedure cmtools.proc statistics workhour is v begindate da...

oracle 儲存過程(三)

create or replace procedure ecs customdetail 0929 建立儲存過程 islongerstation varchar2 50 定義變數 type v cursor is ref cursor 變義游標 detailid v cursor in id v c...

oracle儲存過程超級詳解

oracle 儲存過程總結 1 建立儲存過程 create or replace procedure test var name 1 in type,var name 2 out type is 宣告變數 變數名 變數型別 begin 儲存過程的執行體 end test 列印出輸入的時間資訊 e.g...