Oracle编程基础练习题

更新时间:2024-03-18 09:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

光华园学习网

更多资料请戳: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;

本文来源:https://www.bwwdw.com/article/33f8.html

Top