ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:40KB ,
资源ID:6108953      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/6108953.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(PLSQL练习1.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

PLSQL练习1.doc

1、 OraclePL/SQL面试题 文章分类:数据库 一、    求1-100之间的素数 set serveroutput on declare flag boolean:=true; begin for i in 1..100 loop for j in 2..i-1 loop if mod(i,j)=0 then flag:=false; end if; end loop; if flag then dbms_output.put_line(i); end if; flag:=true; end loop; end; 二、    对所有员工,如果该员

2、工职位是MANAGER,并且在DALLAS工作那么就给他薪金加15%;如果该员工职位是CLERK,并且在NEW YORK工作那么就给他薪金扣除5%;其他情况不作处理 对所有员工,如果该员工部门是SALES,并且工资少于1500那么就给他薪金加15%;如果该员工部门是RESEARCH,并且职位是CLERK那么就给他薪金增加5%;其他情况不作处理 declare cursor c1 is select empno,sal,dname,job from emp e,dept d where e.deptno = d.deptno; c1rec c1%rowtype; begin

3、 for c1rec in c1 loop if c1rec.dname = 'SALES' and c1rec.sal <1500 then update emp set sal = sal * 1.15 where empno = c1rec.empno; elsif c1rec.dname='RESEARCH' and c1rec.job='CLERK' then update emp set sal = sal * 1.05 where empno = c1rec.empno; else nul

4、l; end if; end loop; end; declare   cursor c1 is select * from emp;   c1rec c1%rowtype;   v_loc varchar2(20); begin   for c1rec in c1 loop     select loc into v_loc from dept where deptno = c1rec.deptno;     if c1rec.job = 'MANAGER' and v_loc = 'DALLAS' then        update

5、 emp set sal = sal * 1.15 where empno  = c1rec.empno;     elsif c1rec.job='CLERK' and v_loc = 'NEW YORK' then        update emp set sal = sal * 0.95 where empno  = c1rec.empno;     else      null;    end if;       end loop;   end;  三、对直接上级是'BLAKE'的所有员工,按照参加工作的时间加薪:     81年6月以前的加薪10% 81

6、年6月以后的加薪5% declare   cursor c1 is select * from emp where mgr = (select       empno from emp where ename='BLAKE'); --直接上级是'BLAKE'的所有员工   c1rec c1%rowtype; begin   for c1rec in c1 loop     if c1rec.hiredate < '01-6月-81' then        update emp set sal = sal * 1.1 where empno = c1rec.empno;

7、     else        update emp set sal = sal * 1.05 where empno = c1rec.empno;         end if;   end loop; end; 三、    根据员工在各自部门中的工资高低排出在部门中的名次(允许并列). <1>  一条SQL语句 select deptno,ename,sal,(select count(*) + 1 from emp where deptno = a.deptno and sal > a.sal) as ord from emp a order by dep

8、tno,sal desc; <2> PL/SQL块 declare    cursor cc is     select * from dept;   ccrec cc%rowtype;   cursor ck(no number) is     select * from emp where deptno = no order by sal desc;   ckrec ck%rowtype;   i number;   j number;   v_sal number:=-1; begin   for ccrec in cc loop    

9、 i := 0;     for ckrec in ck(ccrec.deptno) loop       i := i + 1;       --写入临时表       if ckrec.sal = v_sal then                        null;       else          j:=i;       end if;       --显示       DBMS_OUTPUT.put_line(ccrec.deptno||chr(9)||ckrec.ename||chr(9)||ckrec.sal||chr(9)||j);

10、       v_sal := ckrec.sal;        end loop;    end loop; end; 四、编写一个触发器实现如下功能:   对修改职工薪金的操作进行合法性检查:    a) 修改后的薪金要大于修改前的薪金    b) 工资增量不能超过原工资的10%    c) 目前没有单位的职工不能涨工资 create or replace trigger tr1 after update of sal on emp for each row begin   if :new.sal <= :old.sal then        ra

11、ise_application_error(-20001,'修改后的薪金要大于修改前的薪金');   elsif :new.sal > :old.sal * 1.1 then        raise_application_error(-20002,'工资增量不能超过原工资的10%');      elsif :old.deptno is null then        raise_application_error(-20003,'没有单位的职工不能涨工资');             end if; end; 四、    编写一个PL/SQL程序块,对名字以"A"

12、或"S"开始的所有雇员按他们的基本薪水的10%加薪。 DECLARE CURSOR c1 IS SELECT * FROM emp WHERE SUBSTR(ename,1,1)=´A´ OR SUBSTR(ename,1,1)=´S´ FOR UPDATE OF sal; BEGIN FOR i IN c1 LOOP UPDATE emp SET sal=NVL(sal,0)+NVL(sal,0)*0.1 WHERE CURRENT OF c1; END LOOP; END; / 五、编写一PL/SQL,对所有的"销售员"(SALESMAN)增加佣金500. D

13、ECLARE CURSOR c1 IS SELECT * FROM emp WHERE job=´SALESMAN´ FOR UPDATE OF sal; BEGIN FOR i IN c1 LOOP UPDATE emp SET sal=NVL(sal,0)+500 WHERE CURRENT OF c1; END LOOP; END; / 六、编写一PL/SQL,以提升两个资格最老的"职员"为"高级职员"。(工作时间越长,优先级越高) DECLARE CURSOR c1 IS SELECT * FROM emp WHERE job=´CLERK´ ORDER

14、BY hiredate FOR UPDATE OF job; --升序排列,工龄长的在前面 BEGIN FOR i IN c1 LOOP EXIT WHEN c1%ROWCOUNT>2; DBMS_OUTPUT.PUT_LINE(i.ename); UPDATE emp SET job=´HIGHCLERK´ WHERE CURRENT OF c1; END LOOP; END; / 七、编写一PL/SQL,对所有雇员按他们基本薪水的10%加薪,如果所增加的薪水大于5000,则取消加薪。 DECLARE CURSOR c1 IS SELECT * FROM em

15、p FOR UPDATE OF sal; BEGIN FOR i IN c1 LOOP IF (i.sal+i.sal*0.1)<=5000 THEN UPDATE emp SET sal=sal+sal*0.1 where Empno=i.empno DBMS_OUTPUT.PUT_LINE(i.sal); END IF; END LOOP; END; / 八、显示EMP中的第四条记录。 DECLARE CURSOR c1 IS SELECT * FROM emp; BEGIN FOR i IN c1 LOOP IF c1%ROWCOUNT=4 TH

16、EN DBMS_OUTPUT.PUT_LINE(i. EMPNO || ´ ´ ||i.ENAME || ´ ´ || i.JOB || ´ ´ || i.MGR || ´ ´ || i.HIREDATE || ´ ´ || i.SAL || ´ ´ || i.COMM || ´ ´ || i.DEPTNO); EXIT; END IF; END LOOP; END; / 九、.编写一个给特殊雇员加薪10%的过程,这之后,检查如果已经雇佣该雇员超过60个月,则给他额外加薪3000. CREATE OR REPLACE PROCEDURE Raise_Sal(no IN NUMB

17、ER) AS vhiredate DATE; vsal emp.sal%TYPE; BEGIN SELECT hiredate,sal INTO vhiredate,vsal FROM emp WHERE empno=no; IF MONTHS_BETWEEN(SYSDATE,vhiredate)>60 THEN vsal:=NVL(vsal,0)*1.1+3000; ELSE vsal:=NVL(vsal,0)*1.1; END IF; UPDATE emp SET sal=vsal WHERE empno=no; END; / VARIABLE no NUMBER

18、 BEGIN :no:=7369; END; / 十、编写一个函数以检查所指定雇员的薪水是否有效范围内。不同职位的薪水范围为: Designation Raise Clerk 1500-2500 Salesman 2501-3500 Analyst 3501-4500 Others 4501 and above. 如果薪水在此范围内,则显示消息"Salary is OK",否则,更新薪水为该范围内的最水值。 CREATE OR REPLACE FUNCTION Sal_Level(no emp.empno%TYPE) RETURN CHAR AS vjob emp.j

19、ob%TYPE; vsal emp.sal%TYPE; vmesg CHAR(50); BEGIN SELECT job,sal INTO vjob,vsal FROM emp WHERE empno=no; IF vjob=´CLERK´ THEN IF vsal>=1500 AND vsal<=2500 THEN vmesg:=´Salary is OK.´; ELSE vsal:=1500; vmesg:=´Have updated your salary to ´||TO_CHAR(vsal); END IF; ELSIF vjob=´SALESMAN´ THE

20、N IF vsal>=2501 AND vsal<=3500 THEN vmesg:=´Salary is OK.´; ELSE vsal:=2501; vmesg:=´Have updated your salary to ´||TO_CHAR(vsal); END IF; ELSIF vjob=´ANALYST´ THEN IF vsal>=3501 AND vsal<=4500 THEN vmesg:=´Salary is OK.´; ELSE vsal:=3501; vmesg:=´Have updated your salary to ´||TO_CHAR(v

21、sal); END IF; ELSE IF vsal>=4501 THEN vmesg:=´Salary is OK.´; ELSE vsal:=4501; vmesg:=´Have updated your salary to ´||TO_CHAR(vsal); END IF; END IF; UPDATE emp SET sal=vsal WHERE empno=no; RETURN vmesg; END; / DECLARE vmesg CHAR(50); vempno emp.empno%TYPE; BEGIN vempno:=&empno; vm

22、esg:=Sal_Level(vempno); DBMS_OUTPUT.PUT_LINE(vmesg); END; / --SELECT empno,ename,sal,comm,hiredate FROM emp WHERE empno=:no; 十二、有如下MyTable: 日期 日产 1    3.3333 2    4.2222 3    1.5555 4    9.8888 5 ……… 要求用SQL语句生成如下查询 日期 日产     累计日产 1    3.3333   3.3333 2    4.2222   7.5555 3    1.5

23、555   9.0000 4    9.8888   18.8888 5……… select id,quantity,(select sum(quantity)from mytable where id<=t.id) as acount from mytable t 十三、创建一个序列,第一次从5循环到10,以后再从0开始循环 create sequence test_seq      start with 5      increment by 1      maxvalue 10      minvalue 0      cycle      nocache

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服