首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

PL/SQL 经典小结(一)习题

2013-09-11 
PL/SQL 经典总结(一)习题-------------------------------------练习/*问题1:输入一个雇员的编号,如果其工

PL/SQL 经典总结(一)习题

-------------------------------------练习/*问题1:输入一个雇员的编号,如果其工资高于3500,则显示高工资,工资大于2000,则显示中等工资, 工资小于2000 的则认为是低等工资。 DECLARE  eno emp.empno%TYPE ;  sal emp.sal%TYPE ; BEGIN  eno := &en ;  SELECT sal INTO sal FROM emp WHERE empno=eno ;  IF sal>3500 THEN  DBMS_OUTPUT.put_line('高工资。。。') ;  ELSIF sal>2000 THEN  DBMS_OUTPUT.put_line('中等工资。。') ;  ELSE  DBMS_OUTPUT.put_line('底工资。。。') ;  END IF ; END ; / */DECLAREeno emp.empno%type;sa emp.sal%type;BEGIN eno:=&员工编号; SELECT sal INTO sa FROM emp WHERE emp.empno=eno; IF sa>3500 THEN DBMS_OUTPUT.put_line('.....高工资'); ELSIF sa>2000 THEN DBMS_OUTPUT.put_line('.....中工资'); ELSE DBMS_OUTPUT.put_line('.....低工资');  END IF; END;/*问题2:输入一个雇员编号,根据它所在的部门涨工资,规则:  ? 10 部门上涨10%  ? 20 部门上涨20%  ? 30 部门上涨30%   ? 其他部门上涨18% 所有部门的上涨工资,最多不能超过5000,如果超过5000,则工资就为5000。 */DECLAREeno emp.empno%type;dn emp.deptno%type;sa emp.sal%type;BEGINeno:=&员工编号;SELECT emp.deptno INTO dn FROM emp WHERE emp.empno=eno;UPDATE emp3 SET sal = decode(dn,'10',sal*(1+0.1),'20',sal*(1+0.15),'30',sal*(1+0.2),sal*(1+0.18)) WHERE emp3.empno=eno;SELECT emp.sal INTO sa FROM emp WHERE emp.empno=eno;IF sa>5000 THENUPDATE emp3 SET sal=5000 WHERE emp3.empno=eno;END IF;END;declare    eno emp3.empno%TYPE;    dno emp3.deptno%TYPE;    esal emp3.sal%TYPE; begin      eno:=&no;      select deptno,sal into dno,esal from emp3 where empno=eno;      if dno=10 then            esal := esal + esal*0.1;      elsif dno=20 then            esal := esal + esal*0.2;      elsif dno=30 then            esal := esal + esal*0.3;      end if;      if esal>5000 then          esal:=5000;      end if;     update emp3 set sal=esal where empno=eno; end; /* 问题3 接受部门编号,显示部门名和地理位置*/DECLARE   dno dept.deptno%type;   dna dept.dname%type;   lo dept.loc%type; BEGIN   dno:=&部门编号:;   SELECT dept.dname,dept.loc INTO dna,lo FROM dept WHERE dept.deptno=dno;   DBMS_OUTPUT.put_line(dno||'部门名称是'||dna||'位于'||lo);   EXCEPTION   WHEN no_data_found THEN   DBMS_OUTPUT.put_line('你输入的部门号可能有误!');END;/* 问题4 接受雇员编号,显示该雇员的工资和提成,没有提成的用0代替 为应付检查 没有奖金的统一显示奖金为100 不准用if语句*/DECLARE eno emp3.empno%type; sa emp3.sal%type; co emp3.comm%type; BEGIN    eno:=&请输入雇员编号;    SELECT emp3.sal,nvl(emp3.comm,100) INTO sa,co FROM emp3 WHERE emp3.empno=eno;    DBMS_OUTPUT.put_line('编号为'||eno||'的雇员工资是'||sa||'提成是'||co);    EXCEPTION    WHEN no_data_found THEN    Dbms_Output.put_line('你输入的雇员编号不存在!~');END;declare sno emp.empno%type; e1 emp%rowtype; begin sno:=&no; select * into e1 from emp where empno=sno; dbms_output.put_line(e1.empno||'       '||e1.ename||'  '||e1.job||'  '||e1.mgr||'  '||e1.hiredate||'  '||e1.sal||' '||nvl(e1.comm,0)||' '||e1.deptno); exception when no_data_found then dbms_output.put_line('not find date'); end; /*  问题5 用Loop为dept表增加50-90这些部门*/DECLARE  no NUMBER;  BEGIN  no:=50;  WHILE (no<=90) LOOP  INSERT INTO dept1(dept_id) values(no);  no:=no+10;  END LOOP;END;/* 问题6 接受一个雇员名,显示该雇员的所有内容,当没有该雇员的时候用异常显示 */DECLARE ena emp.ename%type; e1 emp%rowtype; BEGIN    ena:=&雇员名;    SELECT *  INTO e1 FROM emp where emp.ename = ena;     dbms_output.put_line(e1.empno||'       '||e1.ename||'  '||e1.job||'  '||e1.mgr||'  '||e1.hiredate||'  '||e1.sal||' '||nvl(e1.comm,0)||' '||e1.deptno);   EXCEPTION   WHEN no_data_found THEN   DBMS_OUTPUT.put_line('该雇员名有误!'); END;/* 问题7 接受两个数相除,并显示结果,如果除数为0,则显示错误提示*/DECLARE a NUMBER; b NUMBER;   BEGIN   a:=&a;   b:=&b;   DBMS_OUTPUT.put_line(a||'/'||b||'='||a/b);   EXCEPTION   WHEN zero_divide THEN   DBMS_OUTPUT.put_line('被除数不能为0!');   END;   
?
我的异常网推荐解决方案:软件开发者薪资,http://www.myexception.cn/other/1391128.html

热点排行