JavaOracle中几十个实用的PLSQLWord格式.docx

上传人:b****4 文档编号:16488721 上传时间:2022-11-24 格式:DOCX 页数:11 大小:18.21KB
下载 相关 举报
JavaOracle中几十个实用的PLSQLWord格式.docx_第1页
第1页 / 共11页
JavaOracle中几十个实用的PLSQLWord格式.docx_第2页
第2页 / 共11页
JavaOracle中几十个实用的PLSQLWord格式.docx_第3页
第3页 / 共11页
JavaOracle中几十个实用的PLSQLWord格式.docx_第4页
第4页 / 共11页
JavaOracle中几十个实用的PLSQLWord格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

JavaOracle中几十个实用的PLSQLWord格式.docx

《JavaOracle中几十个实用的PLSQLWord格式.docx》由会员分享,可在线阅读,更多相关《JavaOracle中几十个实用的PLSQLWord格式.docx(11页珍藏版)》请在冰豆网上搜索。

JavaOracle中几十个实用的PLSQLWord格式.docx

||m||&

||erec.deptno);

END;

/

Q.编写一个PL/SQL程序块以计算某个雇员的年度薪水总额。

esalNUMBER;

eenameemp.ename%TYPE;

SELECT(NVL(sal,0)+NVL(comm,0))*12,enameINTOesal,eenameFROMempWHEREempno=&

DBMS_OUTPUT.PUT_LINE(eename||&

&

sYearsSalaryis&

||esal);

Q.按下列加薪比执行:

DeptnoRaise(%age)

105%

2010%

3015%

4020%

加薪的百分比是以他们现有的薪水为根据的。

写一PL/SQL以对指定雇员加薪。

vcounterNUMBER:

=10;

vraiseNUMBER;

LOOP

EXITWHENvcounter>

40;

UPDATEempsetsal=NVL(sal,0)+NVL(sal,0)*0.05WHEREdeptno=vcounter;

vcounter:

=vcounter+10;

ENDLOOP;

Q.编写一PL/SQL以向"

emp"

表添加10个新雇员编号。

(提示:

如果当前最大的雇员编号为7900,则新雇员编号将为7901到7910)

vcounterNUMBER;

SELECTMAX(empno)INTOvcounterFROMemp;

FORiIN1..10

=vcounter+1;

INSERTINTOemp(empno)VALUES(vcounter);

Q.只使用一个变量来解决实验课作业4。

A

--vraiseNUMBER;

SELECT*INTOerec

FROMemp

WHEREename=&

ename&

;

IFerec.job=&

CLERK&

THEN

UPDATEempSETsal=sal+500WHEREempno=erec.empno;

ELSIFerec.job=&

SALESMAN&

UPDATEempSETsal=sal+1000WHEREempno=erec.empno;

ANALYST&

UPDATEempSETsal=sal+1500WHEREempno=erec.empno;

ELSE

UPDATEempSETsal=sal+2000WHEREempno=erec.empno;

ENDIF;

--UPDATEempSETsal=sal+vraiseWHEREempno=erec.empno;

--DBMS_OUTPUT.PUT_LINE(vraise);

Q.接受两个数相除并且显示结果。

如果第二个数为0,则显示消息"

DIVIDEBYZERO"

num1NUMBER;

num2NUMBER;

num1:

=&

num;

num2:

DBMS_OUTPUT.PUT_LINE(num1||&

/&

||num2||&

is&

||num1/num2);

EXCEPTION

WHENZERO_DIVIDETHEN

Didn&

tyourteachertellyounottoDIVIDEBYZERO?

/

第二阶段

Q.编写一个PL/SQL程序块,对名字以"

A"

或"

S"

开始的所有雇员按他们的基本薪水的10%加薪。

CURSORc1IS

SELECT*FROMempWHERESUBSTR(ename,1,1)=&

A&

ORSUBSTR(ename,1,1)=&

S&

FORUPDATEOFsal;

FORiINc1

UPDATEempSETsal=NVL(sal,0)+NVL(sal,0)*0.1WHERECURRENTOFc1;

Q.编写一PL/SQL,对所有的"

销售员"

(SALESMAN)增加佣金500.

SELECT*FROMempWHEREjob=&

UPDATEempSETsal=NVL(sal,0)+500WHERECURRENTOFc1;

Q.编写一PL/SQL,以提升两个资格最老的"

职员"

为"

高级职员"

(工作时间越长,优先级越高)

ORDERBYhiredateFORUPDATEOFjob;

--升序排列,工龄长的在前面

EXITWHENc1%ROWCOUNT>

2;

DBMS_OUTPUT.PUT_LINE(i.ename);

UPDATEempSETjob=&

HIGHCLERK&

WHERECURRENTOFc1;

Q.编写一PL/SQL,对所有雇员按他们基本薪水的10%加薪,如果所增加的薪水大于5000,则取消加薪。

CURSORc1ISSELECT*FROMempFORUPDATEOFsal;

IF(i.sal+i.sal*0.1)<

=5000THEN

UPDATEempSETsal=sal+sal*0.1WHERECURRENTOFc1;

DBMS_OUTPUT.PUT_LINE(i.sal);

Q.显示EMP中的第四条记录。

CURSORc1ISSELECT*FROMemp;

IFc1%ROWCOUNT=4THEN

DBMS_OUTPUT.PUT_LINE(i.EMPNO||&

||i.ENAME||&

||i.JOB||&

||i.MGR||&

||i.HIREDATE||&

||i.SAL||&

||i.COMM||&

||i.DEPTNO);

EXIT;

第三阶段

Q.使用REF游标显示"

EMP"

表中的值。

TYPEemprectypISRECORD

EMPNOemp.empno%TYPE,

ENAMEemp.ename%TYPE,

JOBemp.job%TYPE,

MGRemp.mgr%TYPE,

HIREDATEemp.hiredate%TYPE,

SALemp.sal%TYPE,

COMMm%TYPE,

DEPTNOemp.deptno%TYPE

TYPEemp_cursorISREFCURSORRETURNemp%ROWTYPE;

vemp_curEMP_CURSOR;

vemp_recEMPRECTYP;

OPENvemp_curFORSELECT*FROMemp;

FETCHvemp_curINTOvemp_rec;

EXITWHENvemp_cur%NOTFOUND;

DBMS_OUTPUT.PUT(vemp_rec.empno||&

||vemp_rec.ename||&

||vemp_rec.job);

DBMS_OUTPUT.PUT(vemp_rec.mgr||&

||vemp_rec.hiredate||&

||vemp_rec.sal);

DBMS_OUTPUT.PUT_line(vemp_m||&

||vemp_rec.deptno);

CLOSEvemp_cur;

Q.从"

中获得值送到PL/SQL表,将PL/SQL表中的薪水值增加500,并向用户显示增加的薪水及其他详细信息。

TYPEemprecISRECORD

iBINARY_INTEGER:

=1;

TYPEemp_tabISTABLEOFEMPRECINDEXBYbinary_integer;

vempEMP_TAB;

FORxINc1

vemp(i).empno:

=x.empno;

vemp(i).ename:

=x.ename;

vemp(i).job:

=x.job;

vemp(i).mgr:

=x.mgr;

vemp(i).hiredate:

=x.hiredate;

vemp(i).sal:

=x.sal+500;

vemp(i).comm:

=m;

vemp(i).deptno:

=x.deptno;

i:

=i+1;

FORjIN1..i-1

DBMS_OUTPUT.PUT(vemp(j).empno||&

||vemp(j).ename||&

||vemp(j).job);

DBMS_OUTPUT.PUT(vemp(j).mgr||&

||vemp(j).hiredate||&

||vemp(j).sal);

DBMS_OUTPUT.PUT_line(vemp(j).comm||&

||vemp(j).deptno);

Q.一旦将值送到PL/SQL表后,尝试在PL/SQL表中插入新记录并且删除某些现有的记录。

=x.sal;

--FORjIN1..i-1

--LOOP

--DBMS_OUTPUT.PUT(vemp(j).empno||&

--DBMS_OUTPUT.PUT(vemp(j).mgr||&

--DBMS_OUTPUT.PUT_line(vemp(j).comm||&

--ENDLOOP;

--插入记录

插入记录:

=1000;

Goldens&

Software&

=null;

2003-01-04&

=8888;

FORjIN1..i

--删除第5、6条记录

删除第5、6条记录:

FORjIN5..i-2

vemp(j).empno:

=vemp(j+2).empno;

vemp(j).ename:

=vemp(j+2).ename;

vemp(j).job:

=vemp(j+2).job;

vemp(j).mgr:

=vemp(j+2).mgr;

vemp(j).hiredate:

=vemp(j+1).hiredate;

vemp(j).sal:

=vemp(j+2).sal;

vemp(j).comm:

=vemp(j+2).comm;

vemp(j).deptno:

=vemp(j+2).deptno;

vemp(i-1).empno:

vemp(i-1).ename:

vemp(i-1).job:

vemp(i-1).mgr:

vemp(i-1).hiredate:

vemp(i-1).sal:

vemp(i-1).comm:

vemp(i-1).deptno:

FORjIN1..i-2

第四阶段

Q.编写一过程以接受用户输入的三个部门编号并显示其中两个部门编号的部门名称。

CREATEORREPLACEPROCEDUREDeptName(no1dept.deptno%TYPE,no2dept.deptno%TYPE,no3dept.deptno%TYPE)AS

vflagNUMBER;

vdeptno1dept.deptno%TYPE;

vdeptno2dept.deptno%TYPE;

vdname1dept.dname%TYPE;

vdname2dept.dname%TYPE;

vflag:

=TO_NUMBER(TO_CHAR(SYSDATE,&

SS&

));

IF(vflag>

=1ANDvflag<

=10)OR(vflag>

=50ANDvflag<

60)THEN

SELECTdeptno,dnameINTOvdeptno1,vdname1FROMdeptWHEREdeptno=no1;

SELECTdeptno,dnameINTOvdeptno2,vdname2FROMdeptWHEREdeptno=no2;

ELSIF(vflag>

=11ANDvflag<

=20)OR(vflag>

=40ANDvflag<

50)THEN

SELECTdeptno,dnameINTOvdeptno2,vdname2FROMdeptWHEREdeptno=no3;

SELECTdeptno,dnameINTOvdeptno1,vdname1FROMdeptWHEREdeptno=no2;

部门编号:

||vdeptno1||&

||&

部门名称:

||vdname1);

||vdeptno2||&

||vdname2);

EXECUTEDeptName(10,20,30);

Q.编写一过程以显示所指定雇员名的雇员部门名和位置。

CREATEORREPLACEPROCEDU

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1