Oracle数据库练习——习题
1: 写一个PL/SQL 块,实现任意两个员工的工资互换。
提示:可以定义两个变量,并从键盘上输入两个员工的编号,如果两个编号相同,则抛出一个自定义异常,否则进行工资的互换
declare
staff exception;
staff_a emp.empno%type:='&请输入员工a的编号';
staff_b emp.empno%type:='&请输入员工b的编号';
sal_a emp.sal%type;
sal_b emp.sal%type;
begin
select sal into sal_a from emp where empno=staff_a;
select sal into sal_b from emp where empno=staff_b;
if staff_a=staff_b then
raise staff;
else
update emp set sal=sal_a where empno=staff_b;
update emp set sal=sal_b where empno=staff_a;
end if;
exception
when staff then
dbms_output.put_line('错误,不能和自己互换');
end;
2: 写一个PL/SQL 块,将某个以指定字母开头的姓名员工的工资赋给变量,然后输出。
提示:从键盘上输入一个字符串变量的值,如果该字符串的长度超过1,则引发一个自定义异常,否则用该字符对员工表的姓名字段进行模糊查询。如输入’S’,则将所有姓名以S开头的员工的平均工资赋到某个变量中。然后输出
declare
name_na number;
name varchar(32):='&name';
begin
select avg(sal) into name_na from emp where ename like name||'%';
if length(name)>1 then
raise_application_error(-20001,'输入的字符串过长');
else
dbms_output.put_line(name_na);
end if;
end;
3 :写一个PL/SQL 块,输出 NxN 乘法表。
提示:从键盘上输入一个数字N,如输入6,则输出乘法表直到6乘6;如输入9,则输出乘法表直到9乘9。如果输入的是0或负数,则引发一个自定义异常。注意输出的格式要尽可能工整
declare
m number;
begin
m:='&m';
if m<1 then
raise_application_error(-20002,'哈哈哈,不对哦');
else
for i in 1..m loop
for j in 1..i loop
dbms_output.put(i||'*'||j||'='||(i*j)||' ');
end loop;
dbms_output.put_line('');
end loop;
end if;
end;