Oracle编程基础练习题.docx_第1页
Oracle编程基础练习题.docx_第2页
Oracle编程基础练习题.docx_第3页
Oracle编程基础练习题.docx_第4页
Oracle编程基础练习题.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

光华园学习网更多资料请戳:/study09/1、输出九九乘法表 declarei int;j int; beginfor i in 1.9 loop for j in 1.i loop dbms_output.put(i|*|j|=|(i*j)| ); end loop; dbms_output.put_line( );end loop; end;2、输出名为SMITH的雇员的薪水和职位 declarev_name emp1.ename%type:=&name;v_emp emp1%rowtype; beginselect sal,job into v_emp.sal,v_emp.job from emp where ename=upper(v_name);dbms_output.put_line(名字为:|v_name| 薪水为:|v_emp.sal| 工作岗位为:|v_emp.job); end;3、接收部门编号,输出部门名和地理位置(DEPT表) declarev_no dept1.deptno%type:=&deptno;v_dept dept1%rowtype; beginselect DNAME,loc into v_dept.DNAME,v_dept.loc from dept where deptno=v_no;dbms_output.put_line(部门编号为:|v_no| 部门名称为:|v_dept.dname| 部门地理位置为:|v_dept.loc); end;4、接收雇员号,输出该雇员的工资和提成,没有佣金的用0替代。(用%type实现) declarev_no emp1.empno%type:=&no;v_sal emp1.sal%type;v_comm m%type; beginselect sal,nvl(comm,0) into v_sal,v_comm from emp1 where empno=v_no;dbms_output.put_line(编号为:|v_no| 工资|v_sal| 提成|v_comm); end;5、接收雇员号,输出该雇员的所有信息,没有佣金的用0替代。(用%rowtype实现) declarev_no emp1.empno%type:=&no;v_emp emp1%rowtype; beginselect ename,job,mgr,hiredate, sal,nvl(comm,0),deptno into v_emp.ename,v_emp.job,v_emp.mgr,v_emp.hiredate, v_emp.sal,v_m,v_emp.deptno from emp1 where empno=v_no;dbms_output.put_line(编号为:|v_no| 姓名为:|v_emp.ename| 工作岗位:|v_emp.job| 入职日期:| 上司编号:|v_emp.mgr|v_emp.hiredate| 工资|v_emp.sal| 提成|v_m| 部门编号|v_emp.deptno); end; 6、接收一个雇员名或雇员编号,判断他的job,根据job不同,为他增加相应的sal(用if-elsif实现,不要改动到基表,创建一个emp1表与emp表一摸一样)clerk +500salesman +1000analyst+1500otherwise+2000/接收故意编号 繁杂写法 declarev_no emp1.empno%TYPE :=&empno;v_job emp1.job%TYPE;v_sal emp1.sal%TYPE;v_comment varchar2(26); beginselect job,sal into v_job,v_sal from emp1 where empno=v_no;if v_job=CLERK then v_sal:=v_sal+500; v_comment:=v_job; update emp1 set sal=v_sal where empno=v_no;elsif v_job=SALESMAN then v_comment:=v_job; v_sal:=v_sal+1000; update emp1 set sal=v_sal where empno=v_no;elsif v_job=ANALYST then v_comment:=v_job; v_sal:=v_sal+1500; update emp1 set sal=v_sal where empno=v_no;elsif v_job=OTHERWISE then v_comment:=v_job; v_sal:=v_sal+2000; update emp1 set sal=v_sal where empno=v_no;end if;dbms_output.put_line(职位为:|v_comment| 薪水|v_sal| 修改成功!); end;/接收雇员编号 简易写法 declarev_no emp1.empno%TYPE :=&empno;v_job emp1.job%TYPE;v_sal emp1.sal%TYPE;v_comment varchar2(26); beginselect job,sal into v_job,v_sal from emp1 where empno=v_no;if v_job=CLERK then v_sal:=v_sal+500;elsif v_job=SALESMAN then v_sal:=v_sal+1000;elsif v_job=ANALYST then v_sal:=v_sal+1500;elsif v_job=OTHERWISE then v_sal:=v_sal+2000;end if; v_comment:=v_job; update emp1 set sal=v_sal where empno=v_no;dbms_output.put_line(职位为:|v_comment| 薪水|v_sal| 修改成功!); end;/接收雇员名 运用 case when 写法 declare v_name emp1.ename%type:=&名称; v_job emp1.job%type; v_add int :=0; begin select job into v_job from emp1 where ename=v_name; case v_job when upper(clerk) then v_add:=500; when upper(salesman) then v_add:=1000; when upper(analyst) then v_add:=1500; else v_add:=2000; end case; update emp1 set sal = sal+ v_add where ename = v_name; end;7、用loop循环结构,为dept1表增加50-90这些部门 declarei int:=50; beginloop insert into dept(deptno)values(i); i:=i+10; exit when i100;end loop; end;8、接收一个雇员名,输出该雇员的所有内容,(用%rowtype实现),当没有这个雇员时(no_data_found),用异常来显示错误提示 declarev_no emp1.empno%type:=&no;v_emp emp1%rowtype; begin select ename,job,mgr,hiredate, sal,nvl(comm,0),deptno into v_emp.ename,v_emp.job,v_emp.mgr,v_emp.hiredate, v_emp.sal,v_m,v_emp.deptno from emp1 where empno=v_no;dbms_output.put_line(编号为:|v_no| 姓名为:|v_emp.ename| 工作岗位:|v_emp.job| 入职日期:| 上司编号:|v_emp.mgr|v_emp.hiredate| 工资|v_emp.sal| 提成|v_m| 部门编号|v_emp.deptno); exceptionwhen no_data_found thendbms_output.put_line(编号不存在!); end; 9、编写一个PL/SQL程序块以计算某个雇员的年度薪水总额,并将年薪输出来 declarev_no emp1.empno%type:=&no;v_name emp1.ename%type;v_salsum number(7,2); begin select ename,sal*12 into v_name,v_salsum from emp1 where empno=v_no; dbms_output.put_line(编号为:|v_no| 姓名为:|v_name| 年薪为:|v_salsum); end;10、输入部门编号,按照下列加薪比例执行(用CASE实现,创建一个emp1表,修改emp1表的数据)deptnoraise(%)105%2010%3015%4020%加薪比例以现有的sal为标准 declarev_no dept1.deptno%TYPE :=&no;v_sal emp1.sal%TYPE; beginif v_no=10 then update emp1 set sal=sal*(1.05) where deptno=v_no;elsif v_no=20 then update emp1 set sal=sal*(1.10) where deptno=v_no;elsif v_no=30 then update emp1 set sal=sal*(1.15) where deptno=v_no;elsif v_no=40 then update emp1 set sal=sal*(1.20) where deptno=v_no;end if;dbms_output.put_line(修改成功!); end;11、编写一个PL/SQL程序块以向emp1表添加新雇员编号(7901-7910,其中empno字段为主键)提示:原表中有7902雇员,因此插入时需用条件判断,不插入7902 declarei int:=7901; begin loop if i=7902 then i:=i+1; else insert into emp1 (empno) values(i); i:=i+1; end if; exit when i7910; end loop; dbms_output.put_line(插入成功!); end;12、接受2个数相除,并显示结果,如果除数为0,则显示错误提示/*比较复杂的写法*/ declarei int:=&被除数; j int:=&除数; begin if j=0 then dbms_output.put_line(除数为0); else dbms_output.put_line(i|/|j|=|(i/j); end if; end;/*异常处理*/ declarei int:=&被除数; j int:=&除数; rt int; begin rt:=i/j; dbms_output.put_line(i|/|j|=|rt); exception when ZERO_DIVIDE then dbms_output.put_line(除数为0); end;附加题:13、自己创建一张userinfo表,包含两个字段username,password,表中的记录信息取自emp表ename,empno字段,写一个PL/SQL程序,模拟登陆的过程,用户分别输入用户名和密码,对于登陆成功和失败分别给出提示信息 SQL create table userinfo as select ename as username,empno as password from emp; declarev_username userinfo.username%type:=&用户名;v_password userinfo.password%type:=&密码;v_userpassword userinfo.password%type; beginselect password into v_userpassword from userinfo where username = v_username; -查询密码,如果密码正确即可以登录(也对用户名进行检测是否存在); if v_password=v_userpassword then-用户名存在密码正确,可成功登录 dbms_output.put_line(登录成功!); else dbms_output.put_line(登录失败!); end if;exception-查询不到用户,抛出异常!when no_data_found then dbms_output.put_line(登录失败!); end; 14、用userinfo表,写一个PL/SQL程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论