Oracle数据库逻辑循环练习
先建个表
create table staff(
2 s_id number primary key,
3 s_name varchar2(32),
4 s_sal number
5 )
6 /
insert into staff values(1,'张三',3000);
insert into staff values(2,'李四',3300);
insert into staff values(3,'王五',5000);
insert into staff values(4,'马六',3500);
insert into staff values(5,'刘七',4500);
1 写一个PL/SQL 块,实现任意两个员工的工资互换。
提示:可以定义两个变量,并从键盘上输入两个员工的编号,如果两个编号相同,则抛出一个自定义异常,否则进行工资的互换。
set serveroutput on;
declare
NO_MONEY_ERROR EXCEPTION;
idone number;
idtwo number;
saltype1 staff.s_sal%type;
saltype2 staff.s_sal%type;
begin
idone:='1';
idtwo:='2';
if idtwo=idone then
RAISE NO_MONEY_ERROR;
else
select s_sal into saltype1 from staff where s_id = idone;
select s_sal into saltype2 from staff where s_id = idtwo;
update staff set s_sal= saltype2 where s_id = idone;
update staff set s_sal= saltype1 where s_id = idtwo;
end if;
exception
when NO_MONEY_ERROR then
dbms_output.put_line('两次输入的编号相同,出现了系统异常!!!');
end;
2 写一个PL/SQL 块,将某个以指定字母开头的姓名员工的工资赋给变量,然后输出。
提示:从键盘上输入一个字符串变量的值,如果该字符串的长度超过1,则引发一个自定义异常,否则用该字符对员工表的姓名字段进行模糊查询。如输入’S’,则将所有姓名以S开头的员工的平均工资赋到某个变量中。然后输出
declare
NO_MONEY_ERROR EXCEPTION;
sc varchar2(32);
str varchar2(32);
begin
sc:='&请输入一个字符串';
if length(sc)> 1 then
RAISE NO_MONEY_ERROR;
else
select avg(s_sal)into str from staff where s_name like sc|| '%';
dbms_output.put_line('编号:'||str);
end if;
exception
when NO_MONEY_ERROR then
dbms_output.put_line('出现了系统异常!!!');
end;
3 写一个PL/SQL 块,输出 NxN 乘法表。
提示:从键盘上输入一个数字N,如输入6,则输出乘法表直到6乘6;如输入9,则输出乘法表直到9乘9。如果输入的是0或负数,则引发一个自定义异常。注意输出的格式要尽可能工整。
declare
sc number;
begin
sc:='&sc';
if sc <= 0 then
raise_application_error(-20002,'输入的数不能小于0!!!');
else
for i in 1..sc loop
for j in 1..i loop
dbms_output.put(j||'*'||i||'='||i*j||' ');
end loop;
dbms_output.put_line(' ');
end loop;
end if;
end;