第四章习题练习代码
期末复习练习
--例4.1
set serveroutput on;
BEGIN
dbms_output.put_line('chenruxu');
END;
--例4.2
set serveroutput on;
DECLARE
v_length NUMBER:=&length;
v_width NUMBER:=&width;
v_area Number;
BEGIN
v_area := v_length*v_width;
DBMS_OUTPUT.PUT_Line('长方形的面积是'||v_area);
END;
--例4.3
set serveroutput on;
DECLARE
v_length NUMBER:=&length;
v_width NUMBER:=&width;
v_area NUMBER;
BEGIN
declare
v_cir NUMBER;
BEGIN
v_cir:=(v_length+v_width)*2;
dbms_output.put_line('周长是'||v_cir);
END;
v_area:=v_length*v_width;
dbms_output.put_line('面积是'||v_area);
END;
--圆的面积和周长
set serveroutput on;
DECLARE
v_r NUMBER:=&r;
v_cir NUMBER;
v_area number;
BEGIN
v_cir:=2*ACOS(-1)*v_r;
v_area:=ACOS(-1)*v_r*v_r;
dbms_output.put_line('圆的周长是:'||v_cir||'圆的面积是:'||v_area);
END;
--pl/sql中的条件语句
--if4.8
select * from sc;
set serveroutput on;
DECLARE
v_sno student.sno%TYPE:=&sno;
v_grade sc.grade%TYPE;
BEGIN
SELECT AVG(grade) into v_grade from sc where sno=v_sno;
if v_grade>85 then
dbms_output.put_line('此同学的平均成绩为'||v_grade||'一等奖学金');
elsif v_grade>=75 then
dbms_output.put_line('此同学的平均成绩为'||v_grade||'二等奖学金');
else
dbms_output.put_line('此同学的平均成绩为'||v_grade||'无奖学金');
end if;
END;
--4.9if 判断三个数中的最大值
set serveroutput on;
DECLARE
v_a NUMBER:=&a;
v_b NUMBER:=&b;
v_c NUMBER:=&C;
v_x NUMBER;
BEGIN
if v_a > v_b and v_a > v_c then
v_x:=v_a;
else
v_x:=v_b; --假设b为其中最大的数
if v_c >v_x then
v_x:=v_c;
end if;
end if;
dbms_output.put_line('三个数中最大的数是'||v_x);
END;
-- 4.9(2)
set serveroutput on;
DECLARE
v_a number:=&a;
v_b number:=&b;
v_c number:=&c;
v_max number;
begin
if v_a > v_b and v_a > v_c then
v_max := v_a;
elsif v_b>v_c then
v_max:=v_b;
else
v_max:=v_c;
end if;
dbms_output.put_line('三个数中最大的数是'||v_max);
end;
--带有选择符的case条件判断注意在输入的时候
--需要加上指定的‘’代表输入为varchar2类型
set serveroutput on;
DECLARE
v_grade VARCHAR2(10):=&grade;
begin
CASE v_grade
when 'A' then dbms_output.put_line('A类');
when 'B' then dbms_output.put_line('B类');
when 'C' then dbms_output.put_line('C类');
when 'D' then dbms_output.put_line('D类');
else dbms_output.put_line('无效');
end case;
end;
desc student
desc sc
--case搜索语句完成学生成绩的判定
set serveroutput on;
DECLARE
v_sno student.sno%type:=&sno;
v_grade sc.grade%type;
begin
select AVG(grade) into v_grade from sc where sno = v_sno;
case
when v_grade>85 then dbms_output.put_line('一等奖学金');
when v_grade>75 then dbms_output.put_line('二等奖学金');
else
dbms_output.put_line('无奖学金'||'成绩是'||v_grade);
end case;
end;
--pl/sql的循环语句的测试
--loop方式实现循环
set serveroutput on;
declare
v_i number:=1;
begin
loop
dbms_output.put_line(v_i||'的平方是'||v_i*v_i);
v_i:=v_i + 1;
exit when v_i>10;
end loop;
end;
--loop循环结合
set serveroutput on;
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;
--通过while循环来实现10的阶乘
--注意点在于while的后面不能加;否则无法进循环
set serveroutput on;
declare
i number:=1;
n number:=1;
begin
while i<=10 loop
n:=n*i;
i:=i+1;
end loop;
dbms_output.put_line('10的阶乘是:'||n);
end;
--正向的for循环输出10的阶乘
set serveroutput on;
declare
n number:=1;
begin
for i in 2..10 loop
n:=n*i;
end loop;
dbms_output.put_line('10的阶乘:'||n);
end;