Oracle编程基础练习题
更新时间:2024-03-18 09:07:01 阅读量: 综合文库 文档下载
- oracle编程艺术推荐度:
- 相关推荐
光华园学习网
更多资料请戳:http://ghy.swufe.edu.cn/study09/
1、输出九九乘法表 declare iint; jint; begin for 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的雇员的薪水和职位
declare v_name emp1.ename%type:='&name'; v_emp emp1%rowtype; begin selectsal,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表)
declare v_no dept1.deptno%type:='&deptno'; v_dept dept1%rowtype; begin selectDNAME,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实现)
declare v_no emp1.empno%type:=&no; v_sal emp1.sal%type; v_comm emp1.comm%type; begin
光华园学习网
selectsal,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实现)
declare v_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_emp.comm,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_emp.comm||' 部门编号'||v_emp.deptno); end; 6、接收一个雇员名或雇员编号,判断他的job,根据job不同,为他增加相应的sal(用if-elsif实现,不要改动到基表,创建一个emp1表与emp表一摸一样) clerk +500 salesman +1000 analyst +1500 otherwise +2000
//接收故意编号繁杂写法 declare v_no emp1.empno%TYPE :=&empno; v_job emp1.job%TYPE; v_sal emp1.sal%TYPE; v_commentvarchar2(26); begin selectjob,sal into v_job,v_sal from emp1 where empno=v_no; ifv_job='CLERK' then v_sal:=v_sal+500; v_comment:=v_job; update emp1 set sal=v_sal where empno=v_no; elsifv_job='SALESMAN' then v_comment:=v_job; v_sal:=v_sal+1000; update emp1 set sal=v_sal where empno=v_no; elsifv_job='ANALYST' then v_comment:=v_job; v_sal:=v_sal+1500;
光华园学习网
update emp1 set sal=v_sal where empno=v_no; elsifv_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;
//接收雇员编号简易写法 declare v_no emp1.empno%TYPE :=&empno; v_job emp1.job%TYPE; v_sal emp1.sal%TYPE; v_commentvarchar2(26); begin selectjob,sal into v_job,v_sal from emp1 where empno=v_no; ifv_job='CLERK' then v_sal:=v_sal+500; elsifv_job='SALESMAN' then v_sal:=v_sal+1000; elsifv_job='ANALYST' then v_sal:=v_sal+1500; elsifv_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_addint :=0; begin select job into v_job from emp1 where ename=v_name; casev_job when upper('clerk') then v_add:=500; when upper('salesman') then v_add:=1000; when upper('analyst') then v_add:=1500; elsev_add:=2000; end case; update emp1 set sal = sal+ v_add where ename = v_name;
修改成功!!!!'); 光华园学习网
end;
7、用loop循环结构,为dept1表增加50-90这些部门
declare iint:=50; begin loop insert into dept(deptno)values(i); i:=i+10; exit when i>100; end loop; end;
8、接收一个雇员名,输出该雇员的所有内容,(用%rowtype实现),当没有这个雇员时 (no_data_found),用异常来显示错误提示
declare v_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_emp.comm,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_emp.comm||' 部门编号'||v_emp.deptno); exception whenno_data_found then dbms_output.put_line('编号不存在!'); end;
9、编写一个PL/SQL程序块以计算某个雇员的年度薪水总额,并将年薪输出来
declare v_no emp1.empno%type:=&no; v_name emp1.ename%type; v_salsum number(7,2); begin selectename,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
光华园学习网
表的数据) deptno raise(%) 10 5% 20 10% 30 15% 40 20% 加薪比例以现有的sal为标准
declare v_no dept1.deptno%TYPE :=&no; v_sal emp1.sal%TYPE; begin ifv_no=10 then update emp1 set sal=sal*(1.05) where deptno=v_no; elsifv_no=20 then update emp1 set sal=sal*(1.10) where deptno=v_no; elsifv_no=30 then update emp1 set sal=sal*(1.15) where deptno=v_no; elsifv_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
declare iint:=7901; begin loop if i=7902 then i:=i+1; else insert into emp1 (empno) values(i); i:=i+1; end if; exit when i>7910; end loop; dbms_output.put_line('插入成功!!!'); end;
12、接受2个数相除,并显示结果,如果除数为0,则显示错误提示
光华园学习网
/*比较复杂的写法*/ declare i 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;
/*异常处理*/ declare
i int:=&被除数; j int:=&除数; rtint; 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; declare v_usernameuserinfo.username%type:='&用户名'; v_passworduserinfo.password%type:='&密码'; v_userpassworduserinfo.password%type; begin select 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 --查询不到用户,抛出异常!!! whenno_data_found then dbms_output.put_line('登录失败!!!'); end;
14、用userinfo表,写一个PL/SQL程序,模拟注册的过程,用户分别输入用户名和密码,对于登陆成功和失败分别给出提示信息
declare v_usernameuserinfo.username%type:='&用户名'; v_passworduserinfo.password%type:='&密码'; v_nameuserinfo.username%type; begin select username into v_name from userinfo where username = v_username; ifv_name=v_username then dbms_output.put_line('注册失败,此用户存在!!!'); end if; exception whenno_data_found then dbms_output.put_line('注册成功!!!'); insert into userinfo values(v_username,v_password); end;
15、输出倒置的九九乘法表 9*9=81 9*8=72 9*7=63...
declare iint; jint; begin for i in reverse 1..9 loop --变量i从大到小 for j in reverse 1..i loop dbms_output.put(i||'*'||j||'='||(i*j)||' '); end loop; dbms_output.put_line(' '); end loop; end;
正在阅读:
Oracle编程基础练习题03-18
浅谈新时期如何加强公安交警执法规范化建设04-12
我给爸爸当老师作文500字06-24
四级笔试新题型模拟题0401-21
2013—2014学年度广东省清远市高一第一学期期末教学质检物理试卷03-08
现代文学复习题(大二一年皆可用)05-15
爱祖国、爱家乡主题班会12-23
三角梅作文350字07-01
毕业设计(1)03-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 练习题
- 编程
- 基础
- Oracle
- 浅谈如何上好体育课
- 山东济宁汶上一中高三语文12月月考试题
- 传染病学练习题
- 普通化学(第六版)课后习题答案
- 幼儿园大班社会活动:祖国之最
- 全国出版社青年编校技能竞赛试题答案及讲评
- 高大烟囱新建
- 小初高学习2018年九年级政治全册 第二单元 五星红旗我为你骄傲测
- 小学生心理咨询案例报告
- 微蜂窝课程开题报告
- 关于继续教育学分管理办法的说明
- 初三数学复习教案
- 2.2016年湖北省鄂州市中考生物试卷(解析版)
- 某转管机枪无链供弹机构方案设计
- 东南大学材料学院考研2005年硕士研究生入学试题 - 图文
- 全国计算机三级网络考试大纲及笔试知识点及精华总结
- 无功补偿RSVG
- 让教材成为练笔的支点论文
- 习题一答案单片机硬件基础
- 奥鹏西工大16春《房地产法》平时作业