PLSQL编程练习题详解

1、输出菱形

declare 
     m number := 3;
begin
     
     for y in -m..m loop 
     
         for x in -m..m loop
           
             if abs(y) + abs(x) <= m then                       
                dbms_output.put('*');
             else    
                 dbms_output.put(' ');
             end if;
             
         end loop;       
         dbms_output.new_line();
     end loop;
end;

运行结果
在这里插入图片描述

2、编写一个程序,用于接受用户输入的数字,将该数左右反转,然后显示反转后的数。

declare
score number(10);
tp number;
rem number(10):=0;
begin
  score:=&请输入要反转的数字;
  while score > 0 loop
    tp := mod(score,10);
    rem := (rem*10)+tp;
    score := trunc(score/10);
    end loop;
    dbms_output.put_line('反转后的数字为:'|| rem);
end;

运行结果
在这里插入图片描述
在这里插入图片描述
3、编写一个程序,往一个表中查询数据,如果没有查到任何数据,将引发no_data_found异常,显式一则消息。

declare
empname varchar2(20);
begin
  select ename into empname from emp where sal>8000;
  dbms_output.put_line(empname);
  exception
    when no_data_found then dbms_output.put_line('未找到任何数据');
    when too_many_rows then dbms_output.put_line('查询结果返回多行');
end;

这里以oracle的自带emp表为例

运行结果
在这里插入图片描述
4、编写一个程序,接受用户输入的一个值,然后根据该值从一个表中检索出数据,如果这时检索出的记录多于一条,就引发TOO_MANY_ROWS异常,显式消息“返回多行”。

declare
empname varchar2(20);
num number;
begin
  num:= &请输入你要查询的工资数目;
  select ename into empname from emp where sal>num;
  dbms_output.put_line(empname);
  exception
    when no_data_found then dbms_output.put_line('未找到任何数据');
    when too_many_rows then dbms_output.put_line('返回多行');
end;

运行截图

返回多行
在这里插入图片描述
在这里插入图片描述
未找到任何数据在这里插入图片描述
在这里插入图片描述
5、编写一个程序,接受特定玩具的ID,比较玩具的价格并显示折扣,如果价格高于或等于500元,则优惠150元;价格高于或等于400元,则优惠100元;如果价格高于或等于250元,优惠50元,价格低于250元,则不优惠。

declare
price number;
num number;
begin
  price:= &请输入玩具的价格;
  if price >= 500  then 
    num := price - 150;
     dbms_output.put_line('优惠金额150元,应付款'||num||'元');
  elsif price >= 400  then 
    num := price - 100;
     dbms_output.put_line('优惠金额100元,应付款'||num||'元');
  elsif price >= 250  then 
    num := price - 50;
     dbms_output.put_line('优惠金额50元,应付款'||num||'元');
  else 
     dbms_output.put_line('应付款'||price||'元');
     end if;
end;

运行截图

在这里插入图片描述
在这里插入图片描述
6、编写一个程序,接受用户输入部门编号、部门名称、部门地址,将其插入到scott.dept表中。

declare
dept_no dept.deptno%type;
dept_name dept.dname%type;
dept_loc dept.loc%type;
begin
  dept_no:=&部门编号;
  dept_name:='&部门名称';
  dept_loc:='&部门地址';
  --insert into dept values(dept_no,dept_name,dept_loc);
  --commit;
  execute immediate 'insert into dept values(:1,:2,:3)'
  using dept_no,dept_name,dept_loc;
  commit;
end;

运行截图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个 PL/SQL 循环练习题: 假设有一个员工表(employee),表结构如下: | 列名 | 数据类型 | | ---------- | ------------ | | id | NUMBER(10) | | name | VARCHAR2(50) | | salary | NUMBER(10) | | hire_date | DATE | | department | VARCHAR2(50) | 请编写一个 PL/SQL 程序,统计每个部门的员工数和平均工资,并将结果存储在一个新表(statistics)中,表结构如下: | 列名 | 数据类型 | | ----------- | ---------- | | department | VARCHAR2 | | employee_no | NUMBER(10) | | avg_salary | NUMBER(10) | 程序逻辑如下: 1. 声明一个游标,查询 employee 表中的所有部门名称和平均工资。 2. 依次读取游标中的每一行数据,计算该部门的员工数和平均工资,并将结果存储到 statistics 表中。 3. 关闭游标,提交事务。 程序代码如下: ```plsql DECLARE CURSOR c_emp IS SELECT department, AVG(salary) AS avg_salary FROM employee GROUP BY department; BEGIN FOR r_emp IN c_emp LOOP INSERT INTO statistics (department, employee_no, avg_salary) VALUES (r_emp.department, 0, r_emp.avg_salary); UPDATE statistics SET employee_no = (SELECT COUNT(*) FROM employee WHERE department = r_emp.department) WHERE department = r_emp.department; END LOOP; COMMIT; END; ``` 注意事项: 1. 在程序开始前,需要先创建 statistics 表。 2. 在程序执行前,需要确保 employee 表中已经存在数据。 3. 在程序执行过程中,需要确保 statistics 表中不存在数据,否则会出现主键冲突错误。 4. 在程序执行过程中,需要确保 employee 表和 statistics 表处于同一数据库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值