Oracle数据库逻辑循环练习

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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值