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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 游标的练习

發(fā)布時(shí)間:2025/3/11 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 游标的练习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
--1、什么是游標(biāo)?使用游標(biāo)的基本步驟是什么??/*擋在PL/SQL塊中執(zhí)行查詢語(yǔ)句(SELECT)和數(shù)據(jù)操縱語(yǔ)句(DML)時(shí),Oracle會(huì)在內(nèi)存中分配一個(gè)緩沖區(qū),緩沖區(qū)中包含了處理過(guò)程的必需信息,包括已經(jīng)處理完的行數(shù)、指向被分析行的指針和查詢情況下的活動(dòng)集,即查詢語(yǔ)句返回的數(shù)據(jù)行集。該緩沖區(qū)域稱為上下文區(qū),游標(biāo)是指向該緩沖區(qū)的句柄或指針。*/

--2、游標(biāo)有哪幾種類型?分別在什么情況下使用??/*(1)顯式游標(biāo):由用戶定義、操作,用于處理返回多行數(shù)據(jù)的SELECT查詢。(2)隱式游標(biāo):由系統(tǒng)自動(dòng)進(jìn)行操作,用于處理DML語(yǔ)句和返回單行數(shù)據(jù)的SELECT查詢。*/

--3、用游標(biāo)顯示所有部門(mén)編號(hào)與名稱,以及其所擁有的員工人數(shù)。--方法一declarecursor c_emp is select * from emp;cursor c_dept is select * from dept;v_count number;beginfor v_dept in c_dept loopv_count := 0;for v_emp in c_emp loopif v_emp.deptno = v_dept.deptno thenv_count := v_count + 1;end if;end loop;dbms_output.put_line('編號(hào):' || v_dept.deptno || '是:' ||?v_dept.dname || '部門(mén),共有員工' || v_count || '人。');end loop;end;--方法二:(PS:缺失沒(méi)有員工的部門(mén))declarecursor c_temp is (select deptno, dname, count(*) count_pfrom (select d.deptno, d.dnamefrom dept djoin emp e on d.deptno = e.deptno) tgroup by deptno, dname);beginfor v_temp in c_temp loopdbms_output.put_line(v_temp.deptno || '-' || v_temp.dname || '-' || v_temp.count_p);end loop;end;

--4、用游標(biāo)屬性%rowcount實(shí)現(xiàn)輸出前十個(gè)員工的信息。declarecursor c is (select * from emp);beginfor v in c loopif c%rowcount<=10 thendbms_output.put_line(c%rowcount || '-' || v.empno || '-' || v.ename || '-' || v.sal);else exit;end if;end loop;end;

--5、通過(guò)使用游標(biāo)來(lái)顯示dept表中的部門(mén)名稱,及其相應(yīng)的員工列表(提示:可以使用雙重循環(huán))。declarecursor c_emp is select * from emp;cursor c_dept is select * from dept;beginfor v_dept in c_dept loopdbms_output.put_line( v_dept.dname || ' 部門(mén)人員列表:');for v_emp in c_emp loopif v_emp.deptno = v_dept.deptno thendbms_output.put_line(' ? ?' || v_emp.ename);end if;end loop;dbms_output.put_line('');end loop;end;

--6、接受一個(gè)部門(mén)號(hào),使用For循環(huán),從emp表中顯示該部門(mén)的所有雇員的姓名,工作和薪水。declarecursor c_emp is select * from emp where deptno = &please_enter_deptno;v_dept dept%rowtype;beginselect * into v_dept from dept where ?deptno = &please_enter_deptno;dbms_output.put_line(&please_enter_deptno || ' :: ' || v_dept.dname);dbms_output.put_line('');dbms_output.put_line('ename :: job :: sal');for v_emp in c_emp loopdbms_output.put_line(v_emp.ename || ' :: ' || v_emp.job || ' :: ' || v_emp.sal);end loop;end;

--7、編寫(xiě)一個(gè)程序塊,將emp表中前5人的名字,及其出的工資等級(jí)(salgrade)顯示出來(lái)。beginfor v_emp in (select e.ename, s.gradefrom emp ejoin salgrade s on e.sal between s.losal and s.hisal where rownum < =5) loopdbms_output.put_line(v_emp.ename || ' :: grade ' || v_emp.grade);end loop;end;

--8、用帶參數(shù)的游標(biāo)輸出部門(mén)編號(hào)為10, 30的員工信息。declarecursor c_emp(v_deptno dept.deptno%type) is select * from emp where deptno = v_deptno;begindbms_output.put_line('部門(mén)編號(hào)為:10 的員工列表');for v_emp in c_emp(10) loopdbms_output.put_line(v_emp.ename);end loop;dbms_output.put_line('部門(mén)編號(hào)為:30 的員工列表');for v_emp in c_emp(30) loopdbms_output.put_line(v_emp.ename);end loop;end;

--9、使用帶參數(shù)的游標(biāo),實(shí)現(xiàn)接受一個(gè)部門(mén)名稱,從emp表中顯示該部門(mén)的所有雇員的姓名,工作和薪水。declarecursor c_emp(v_dname dept.dname%type) is select * from emp where deptno = (select deptno from dept where dname = v_dname);begindbms_output.put_line('SALES 部門(mén)員工名單:');for v_emp in c_emp('SALES') loopdbms_output.put_line(v_emp.ename || ' :: ' || v_emp.job || ' :: ' || v_emp.sal);end loop;end;

--10、用游標(biāo)獲取所有收入超過(guò)2000的 salesman.declarecursor c_emp is select * from emp;begindbms_output.put_line('收入超過(guò)1500的SALESMAN列表:');--收入超過(guò)2000的salesman沒(méi)有數(shù)據(jù)for v_emp in c_emp loopif v_emp.job = 'SALESMAN' and v_emp.sal > 1500 thendbms_output.put_line(v_emp.ename || ' :: ' || v_emp.sal);end if;end loop;end;

--11、編寫(xiě)一個(gè)PL/SQL程序塊,從emp表中對(duì)名字以"A"或"S"開(kāi)始的所有雇員按他們基本薪水的10%給他們加薪。declarecursor c_emp is select * from emp2 for update;beginfor v_emp in c_emp loopif substr(v_emp.ename,1,1) = 'A' or substr(v_emp.ename,1,1) = 'S' thendbms_output.put_line('加薪員工:' || v_emp.ename || '加薪:' || v_emp.sal*0.1);update emp2 set sal = sal*1.1 where ename = v_emp.ename;end if;end loop;commit;end;

--12、emp表中對(duì)所有雇員按他們基本薪水的10%給他們加薪,如果所增加后的薪水大于5000,則取消加薪。beginfor v_emp in (select ename,sal,empno from emp2) loopif v_emp.sal*1.1 < 5000 thendbms_output.put_line('待加薪的員工:' || v_emp.ename);update emp2 set sal = sal * 1.1 where empno = v_emp.empno;end if;end loop;commit;end;

--13、按照salgrade表中的標(biāo)準(zhǔn),給員工加薪,1:5%,2:4%,3:3%,4:2%,5:1%,?--并打印輸出每個(gè)人,加薪前后的工資。--方法一declarecursor c_emp is(select ename, sal, gradefrom emp2 ejoin salgrade s on e.sal between s.losal and s.hisal) order by ename;beginfor v_emp in c_emp loopupdate emp2 set sal = sal * (1+((6 - v_emp.grade)*0.01)) where emp2.ename = v_emp.ename;dbms_output.put_line(v_emp.ename || ',加薪前:' || v_emp.sal || ',等級(jí):' ||?v_emp.grade || ',加薪后:' || v_emp.sal * (1+((6 - v_emp.grade)*0.01)));end loop;commit;end;--方法二declarecursor c_emp is(select ename, sal, gradefrom emp2 ejoin salgrade s on e.sal between s.losal and s.hisal) order by ename;beginfor v_emp in c_emp loopcase v_emp.gradewhen 1 thenupdate emp2 set sal = sal * (1+0.05) where emp2.ename = v_emp.ename;when 2 thenupdate emp2 set sal = sal * (1+0.04) where emp2.ename = v_emp.ename;when 3 thenupdate emp2 set sal = sal * (1+0.03) where emp2.ename = v_emp.ename;when 4 thenupdate emp2 set sal = sal * (1+0.02) where emp2.ename = v_emp.ename;when 5 thenupdate emp2 set sal = sal * (1+0.01) where emp2.ename = v_emp.ename;else null;end case;/*dbms_output.put_line(v_emp.ename || ',加薪前:' || v_emp.sal || ',等級(jí):' ||?v_emp.grade || ',加薪后:' || v_emp.sal * (1+((6 - v_emp.grade)*0.01)));*/end loop;commit;end;

總結(jié)

以上是生活随笔為你收集整理的Oracle 游标的练习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。