日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库存储过程示例

發布時間:2023/12/14 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库存储过程示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

存儲過程

  • 使用存儲過程來解決漲工資
    • 漲工資,總裁漲1000,經理漲800,其他人漲400。

偽代碼:

ResultSet rs = “select empno,job from emp”;

While(rs.next()){

Int eno = rs.getInt(“empno”);

String job = rs.getString(“job”);

If(“PRESIDENT”.equals(job))

{

?????? update emp set sal = sal+1000;

}else if(“Manager”.equals(job))

{

?????? update emp set sal = sal+800;

}else

{

?????? update emp set sal = sal+400;

}

}

分析:那么上面這樣的一個過程,使用存儲過程(PL/SQL)就可以輕松解決。可以寫很少的java代碼。

①.查詢emp表:7839的姓名和薪水并打印.

declare

pename emp.ename%type;

psal emp.sal%type;

begin

--得到7839的姓名和薪水

select ename,sal into pename,psal from emp where empno = 7839;

dbms_output.put_line(pename||'的薪水是'||psal);

end;

運行結果:KING的薪水是5000

②.使用記錄型變量

記錄型變量:取這個表里面的一行作為我們的這個類型,那么一行有多個列,那么就有多個類型,相當于一個數組。

多個數據類型作為的我們的數據類型。

set serveroutput on

declare

? emp_rec emp%rowtype;

? begin

? select * into? emp_rec from emp where empno=7839;

? dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);

? end;

?/

③.從鍵盤接收一個數字(使用PL/SQL判斷輸入輸出數字)

set serveroutput on

accept num prompt '請輸入一個數字';

declare

? pnum number :=#

? begin

? if pnum = 0 then dbms_output.put_line('你輸入的數字是0');

? elsif pnum = 1 then dbms_output.put_line('你輸入的數字是1');

? else dbms_output.put_line('其他數字');

? end if;

? end;

? /

運行結果:你輸入的數字是1

④.輸出1~10的數字

set serveroutput on

?declare

?? pnum number :=1;

?? begin

?loop

? exit when pnum>10;

?dbms_output.put_line(pnum);

? pnum := pnum+1;

? end loop;

end;

  • 光標的使用

光標的作用:用于存儲一個查詢返回的多行數據。

①.查詢所有人的薪水:

set serveroutput on

declare

cursor cemp is select ename,sal from emp;

pename emp.ename%type;

psal emp.sal%type;

begin

? open cemp;

? loop

? fetch cemp into pename,psal;?

? exit when cemp%notfound;

? dbms_output.put_line(pename||'的薪水是'||psal);?

? end loop;

end;

運行結果:

SMITH的薪水是800

ALLEN的薪水是1600

WARD的薪水是1250

JONES的薪水是2975

MARTIN的薪水是1250

BLAKE的薪水是2850

CLARK的薪水是2450

SCOTT的薪水是3000

KING的薪水是5000

TURNER的薪水是1500

ADAMS的薪水是1100

JAMES的薪水是950

FORD的薪水是3000

MILLER的薪水是1300

②.使用光標:漲工資,總裁漲1000,經理漲800,其他人漲400

set serveroutput on

declare

cursor cemp is select empno,job[h1]? from emp;

pno emp.empno%type;

pjob emp.job%type;

begin

? open cemp;

? loop

??? fetch cemp into pno,pjob;

??? exit when cemp%notfound;?

???? -- 判斷職位

? if pjob='PRESIDENT' then update emp set sal=sal+1000 where empno=pno;

? elsif pjob='MANAGER' then update emp set sal=sal+800 where empno=pno;

? else update emp set sal = sal +400 where empno=pno;

? end if;

? end loop;

? close cemp;

end;

③.定義帶參數的光標(查詢并打印某個部門中員工的姓名)

set serveroutput on

declare

?cursor cemp(dno number) is select ename from emp where empno = dno;

?pname emp.ename%type;

begin

open cemp(7369);//傳遞參數7369

loop

? fetch cemp into pname;

? exit when cemp%notfound;?

? dbms_output.put_line(pname);

end loop;

close cemp;

end;

運行結果:

SMITH

④.查詢并打印30號部門員工姓名。

? declare

? cursor cemp(dno number) is select ename from emp where deptno = dno;

? dename emp.ename%type;

? begin

??? open cemp(30);

??? loop

????? fetch cemp into dename;

????? exit when cemp%notfound;

????? dbms_output.put_line(dename);

??? end loop;

??? close cemp;

??? end;

?

⑤.為部門號為10的員工漲工資

declare

? cursor cemp(dno number) is select deptno from emp where deptno = dno;

? dempno emp.deptno%type;

? begin

??? open cemp(10);

??? fetch cemp into dempno;

??? update emp set sal= sal*1.1 where deptno=dempno;

??? close cemp;

? end;

  • 例外的使用
  • 被0除例外

declare

? pnum number;

? begin

??? pnum := 1/0;

??? exception

????? when zero_divide then dbms_output.put_line('1:0不能做被除數');

????? dbms_output.put_line('2:0不能做被除數');

????? when value_error then dbms_output.put_line('算數或者替換錯誤');

????? when others then dbms_output.put_line('其他例外');

? end;

運行結果:

1:0不能做被除數

2:0不能做被除數

  • 查詢并打印50號部門的員工姓名(測試異常:原因:數據表里面沒有50號部門)

declare

? cursor cemp is select ename from emp where deptno=50[h2]?;

? pename emp.ename%type;?

? no_emp_found[h3]? exception;

? begin

??? open cemp;

??? fetch cemp into pename;

??? if cemp%notfound then????

???? ?raise no_emp_found[h4]?;

??? end if;

??? close cemp;???

??? exception

? ????when no_emp_found[h5]? then dbms_output.put_line('沒有找到員工');

????? when others then dbms_output.put_line('其他例外');

end;

運行結果:

沒有找到員工

  • 存儲過程存儲函數

?


?[h1]必須是數據庫的字段列名。

?[h2]由于數據庫沒有部門號50這個部門,那么就會拋出異常,我們這里手動自定義一個異常,然后拋出,然后再下面捕獲。

?[h3]定義異常

?[h4]拋出異常

?[h5]捕獲異常

?

總結

以上是生活随笔為你收集整理的数据库存储过程示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。