Oracle——PL/SQL 块结构练习题
Posted Xiu Yan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle——PL/SQL 块结构练习题相关的知识,希望对你有一定的参考价值。
文章目录
- 1、输出文字
- 2、计算长方形面积
- 3、块结构计算长方形周长与面积
- 4、计算圆的面积
- 5、输入学生学号,判断学生获得奖学金等级
- 6、求 1 到 10 的平方
- 7、求 10 的阶乘
- 8、计算表达式(86+20×3-152)的绝对值
- 9、计算(86+20×3-152)的绝对值,然后判断该值是否大于80(if else语句)
- 10、根据不同的学习成绩,输出对应的成绩界别
- 11、LOOP循环,从10开始实现每次循环都让变量递减2,直到变量的值小于1,然后终止循环
- 12、输入水果名称查询对应编号
- 13、用搜索式 CASE 语句找到水果编号对应的水果名称
- 14、输入一个部门的编号,查看部门信息
- 15、使用%ROWTYPE类型定义变量,获取员工信息
1、输出文字
set serveroutput on;
declare
begin
dbms_output.put_line('输出文字!!!');
end;
/
2、计算长方形面积
declare
v_length number:=&length;
v_width number:=&width;
v_area number;
begin
dbms_output.put_line('长方形的面积为:'||v_length*v_width);
end;
/
3、块结构计算长方形周长与面积
declare
v_length number:=&length;
v_width number:=&width;
v_area number;
begin
declare
v_cir number;
begin
v_cir := (v_width+v_length)*2;
dbms_output.put_line('周长为:'||v_cir);
end;
v_area := v_length*v_width;
dbms_output.put_line('面积为:'||v_area);
end;
/
4、计算圆的面积
declare
v_r number:=&v_r;
v_area number;
begin
v_area := ACOS(-1)*v_r*v_r;
dbms_output.put_line('圆面积为:'||v_area);
end;
/
5、输入学生学号,判断学生获得奖学金等级
-- 创建学生表
create table student(
sno number primary key,
grade number);
-- 插入数据
insert into student values(1, 70);
insert into student values(2, 90);
-- %TYPE 参考数据类型
-- select...into...赋值语句
declare
v_sno student.sno %TYPE:=&sno;
v_grade student.grade %TYPE;
begin
select avg(grade) into v_grade from student where sno = v_sno;
case
when v_grade > 85 then
dbms_output.put_line('此同学平均成绩为:'||v_grade||',一等奖学金');
when v_grade > 75 then
dbms_output.put_line('此同学平均成绩为:'||v_grade||',二等奖学金');
else
dbms_output.put_line('此同学平均成绩为:'||v_grade||',没有奖学金');
end case;
end;
6、求 1 到 10 的平方
两种实现方式:
方式 1:
declare
i number := 1;
begin
loop
dbms_output.put_line(i||'的平方数为'||i*i);
i:=i+1;
exit when i > 10;
end loop;
end;
方式 2:
declare
i number := 1;
begin
loop
dbms_output.put_line(i||'的平方数为'||i*i);
i:=i+1;
if i > 10 then
exit;
end if;
end loop;
end;
7、求 10 的阶乘
三种实现方式:
方式 1:
declare
i number := 1;
ans number := 1;
begin
loop
ans := ans * i;
i := i + 1;
exit when i >10;
end loop;
dbms_output.put_line('10的阶乘为'||ans);
end;
方式 2:
declare
ans number := 1;
i number := 1;
begin
while i<=10 loop
ans := ans*i;
i := i + 1;
end loop;
dbms_output.put_line('10的阶乘为'||ans);
end;
方式3:
declare
ans number := 1;
begin
for i in 1..10 loop
ans := ans*i;
end loop;
dbms_output.put_line('10的阶乘为'||ans);
end;
/
8、计算表达式(86+20×3-152)的绝对值
declare
v_abs number(8);
begin
v_abs := abs(8+20*3-152);
dbms_output.put_line('v_abs='||v_abs);
end;
9、计算(86+20×3-152)的绝对值,然后判断该值是否大于80(if else语句)
declare
v_abs number(8);
begin
v_abs := abs(86+20*3-152);
if v_abs >= 80 then
dbms_output.put_line('v_abs='||v_abs||'该值是大于等于80的');
else
dbms_output.put_line('v_abs='||v_abs||'该值是小于80的');
end if;
end;
10、根据不同的学习成绩,输出对应的成绩界别
根据不同的学习成绩,输出对应的成绩界别:小于60为不及格,60到70(不含)为及格,70到85(不含)为良好,大于85为优秀。88分为哪一级?
if elsif 语句方式:
declare
grade number(5) := &grade;
begin
if grade<60 then
dbms_output.put_line('不及格'||grade);
elsif 60<=grade and grade<70 then
dbms_output.put_line('及格'||grade);
elsif 70<=grade and grade<85 then
dbms_output.put_line('良好'||grade);
else
dbms_output.put_line('优秀'||grade);
end if;
end;
case when 方式:
declare
v_grade number(5) := &grade;
begin
case
when v_grade<60 then dbms_output.put_line('不及格'||v_grade);
when 60<=v_grade and v_grade<70 then dbms_output.put_line('及格'||v_grade);
when 70<=v_grade and v_grade<85 then dbms_output.put_line('良好'||v_grade);
else dbms_output.put_line('优秀'||v_grade);
end case;
end;
/
11、LOOP循环,从10开始实现每次循环都让变量递减2,直到变量的值小于1,然后终止循环
两种实现方式:
简单循环方式:
declare
i number(5) := 10;
j number(5) := 1;
begin
loop
dbms_output.put_line('第'||j||'次循环,i = '|| i);
i := i-2;
j := j+1;
exit when i<1;
end loop;
end;
while 循环方式:
declare
i number(5) := 10;
j number(5) := 1;
begin
while i>1 loop
dbms_output.put_line('第'||j||'次循环,i = '|| i);
i := i-2;
j := j+1;
end loop;
end;
12、输入水果名称查询对应编号
从水果表 FRUITS 中查询产品名称为 apple 对应的产品编码,并将编码存储到变量v_ss_id中,最后输出的屏幕上,运行结果如下:apple对应的编码是:101,异常处理部分若没有找到:apple没有对应的编码,若对应多个:apple没有对应的编码(包括声明部分、执行体部分和异常处理部分的结构)
-- 创建水果表
CREATE TABLE fruits(
f_id varchar2(10) NOT NULL,
s_id number(6) NOT NULL,
f_name varchar(255) NOT NULL,
f_price number (8,2) NOT NULL
);
-- 插入数据
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('a1', 101,'apple',5.2);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('b1',101,'blackberry', 10.2);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('bs1',102,'orange', 11.2);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES('bs2',105,'melon',8.2);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('t1',102,'banana', 10.3);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('t2',102,'grape', 5.3);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('o2',103,'coconut', 9.2);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('c0',101,'cherry', 3.2);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('a2',103, 'apricot',2.2);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES('l2',104,'lemon', 6.4);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('b2',104,'berry', 7.6);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('m1',106,'mango', 15.6);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('m2',105,'xbabay', 2.6);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('t4',107,'xbababa', 3.6);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES ('m3',105,'xxtt', 11.6);
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES('b5',107,'xxxx', 3.6);
declare
v_ss_id fruits.s_id %TYPE ;
begin
select s_id into v_ss_id from fruits where f_name = 'apple';
dbms_output.put_line('apple对应的编号是:'|| v_ss_id);
exception
when no_data_found then
dbms_output.put_line('apple没有对应的编码');
when too_many_rows then
dbms_output.put_line('apple没有对应的编码');
end;
13、用搜索式 CASE 语句找到水果编号对应的水果名称
declare
v_id fruits.f_id %TYPE := &f_id;
v_name fruits.f_name %TYPE;
begin
select f_name into v_name from fruits where f_id = v_id;
dbms_output.put_line('编号为:'||v_id);
case v_name
when 'banana' then
dbms_output.put_line('香蕉'||v_name);
when 'apple' then
dbms_output.put_line('苹果'||v_name);
else
dbms_output.put_line('没有要找的水果');
end case;
end;
14、输入一个部门的编号,查看部门信息
自己创建两个表dept(deptno,dname),emp(emp_no,emp_name,deptno,sal),记录自己输入,然后编写pl/sql程序:输入一个部门的编号,显示出这个部门的名称,总人数,平均工资。(使用%TYPE)
-- 创建部门表
create table dept(
deptno number not null,
dname varchar(20) not null,
loc varchar(20) not null
);
-- 创建员工表
create table emp(
emp_no number not null,
emp_name varchar(20) not null,
job varchar(20) not null,
sal number not null,
deptno number not null
);
-- 插入数据
insert into dept values(10, 'account', 'new york');
insert into dept values(20, 'salesman', 'chicago');
insert into dept values(30, 'reserach', 'dallas');
insert into dept values(40, 'operations', 'boston');
insert into emp values(1001, 'mary', 'account', 5000, 10);
insert into emp values(1002, 'smith', 'salesman', 7200, 20);
insert into emp values(1003, 'kate', 'account', 7000, 30);
declare
v_deptno dept.deptno %TYPE := &v_deptno;
v_dname dept.dname %TYPE;
v_num number(7);
v_avg_sal emp.sal %TYPE;
begin
select dname into v_dname from dept where deptno = v_deptno;
select count(*),avg(sal) into v_num, v_avg_sal from emp where deptno = v_deptno;
dbms_output.put_line('该部门名称:'||v_dname);
dbms_output.put_line('该部门员工人数:'||v_num);
dbms_output.put_line('该部门平均工资:'||v_avg_sal);
exception
when no_data_found then
dbms_output.put_line('该部门不存在或该部门没有员工!');
end;
/
15、使用%ROWTYPE类型定义变量,获取员工信息
使用%ROWTYPE类型定义变量,获取某一员工号的员工的信息,并输出该成员的姓名和部门编号。
declare
v_emp_no emp.emp_no %TYPE := &v_emp_no;
v_row_emp emp %ROWTYPE;
begin
select * into v_row_emp from emp where emp_no = v_emp_no;
dbms_output.put_line('该员工为:'||v_row_emp.emp_name);
dbms_output.put_line('部门编码为:'||v_row_emp.deptno);
end;
/
以上是关于Oracle——PL/SQL 块结构练习题的主要内容,如果未能解决你的问题,请参考以下文章