PL/SQL 002---PL/SQL的基本能概念--2.1功能特点--2.1.1结构化程序设计

本文介绍了PL/SQL的三种基本控制结构:顺序结构、分支结构和循环结构。通过具体实例展示了如何使用这些结构来实现简单的数据处理任务,如计算学生总成绩、根据成绩更新绩点等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PL/SQL 002—PL/SQL的基本能概念

2.1功能特点

2.1.1 结构化程序设计

3种基本控制结构:顺序结构、分支结构、循环结构
1. 顺序结构
顺序结构也可称为现行代码执行,控制从一个语句从上到下依序进行执行。顺序结构流程如图2.1所示。
列如
在这里插入图片描述

DECLARE --定义变量
  v_chinese NUMBER;
  v_math NUMBER;
  v_english NUMBER;
  v_total NUMBER;
BEGIN
  ---1.查询语文成绩
  SELECT
    score INTO v_chinese 
  FROM
    student_score 
  WHERE
    name = &stuname
    AND subject = '语文';
  --2.查询数学成绩
  SELECT
    score INTO v_math 
  FROM
    student_score 
  WHERE
    name = &stuname
    AND subject = '数学';
  --3.查询英语成绩
  SELECT
    score INTO v_english 
  FROM
    student_score 
  WHERE
    name = &stuname
    AND subject = '英语';
--求和
v_total := v_chinese + v_math + v_english;
--输出
DBMS_OUTPUT.PUT_LINE ( '张三的语文成绩为:' 
                        || v_chinese 
                        || '数学成绩为:' 
                        || v_math || '英语成绩为:' 
                        || v_english 
                        || '总成绩为:' 
                        || v_total );


end;

在这里插入图片描述
在这里插入图片描述
计算学生的总成绩使用了四个步骤,后一个步骤紧随前一个步骤,从上到下依次执行,最终在输出区域中显示了三门成绩机总成绩。
2.分支结构
分支结构是根据一定的条件去选择执行路径,而不是线性的地执行。分支的出现使得程序具有了一定的智能特性。分支结构适用于带有逻辑关系比较的等条件判断的计算。

在这里插入图片描述
根据某学生的语文成绩判断其绩点

declare
  v_score number;

begin
  select score
    into v_score
    from student_score
   where name = &stuname
     and subject = '语文';

  if v_score > 90 then
    update student_score
       set mark = 'A'
     where name = &stuname
       and subject = '语文';
  elsif v_score > 80 then
    update student_score
       set mark = 'B'
     where name = &stuname
       and subject = '语文';
  elsif v_score > 70 then
    update student_score
       set mark = 'C'
     where name = &stuname
       and subject = '语文';
  elsif v_score >= 60 then
    update student_score
       set mark = 'D'
     where name = &stuname
       and subject = '语文';
  elsif v_score < 60 then
    update student_score
       set mark = 'F'
     where name = &stuname
       and subject = '语文';
  end if;
  commit;
  dbms_output.put_line(&stuname || '的语文绩点更新完毕');
exception
  when no_data_found then
    dbms_output.put_line('有找到' || &stuname || '的数据');
end;

上述sql中处咨询某学生的语文成绩,将语文成绩保存至v_score变量中,很久其成绩范围判断几点,更新其成绩的绩点,因此使用了SQL的IF-ELSEIF-END IF的条件语句。

3.循环结构
循环结构允许某个指定的条件重复执行某段程序代码,循环结构是机构化程序设计非常重要的组成部分,可以看成是条件判断语句和回转语句的结合。

在这里插入图片描述
PL/SQL提供了LOOP、WHILE-LOOP和FOR-LOOP 语句来执行循环。
这次给所有的人的科目个更新绩点。

declare
  --姓名
  v_name varchar(20);
  --科目
  v_subject varchar2(20);
  --成绩
  v_score number;
  --绩点
  v_mark varchar(2);
  cursor c_emp is
    select name, subject, score from student_score for update;
begin
  open c_emp; --打开游标
  Loop
    --循环游标
    --提取游标数据
    fetch c_emp
      into v_name, v_subject, v_score;
    --如果没有数据  则退出游标
    exit when c_emp%notfound;
    if v_score > 90 then
      v_mark := 'A';
    elsif v_score > 80 then
      v_mark := 'B';
    elsif v_score > 70 then
      v_mark := 'C';
    elsif v_score >= 60 then
      v_mark := 'D';
    else
      v_mark := 'F';
    end if;
    --更新
    update student_score set mark = v_mark where name = v_name and subject= v_subject;
    dbms_output.put_line(v_name || V_subject || ':' || v_score || '绩点' || v_mark);
  end loop;
  close c_emp;--关闭游标
end;

在这里插入图片描述
代码的执行流程如下步骤所示:
(1)定义一个名为c_emp的游标,PL/SQL中的游标常用来处理SELECT语句返回的多行数据。
(2)为了提取游标指向多行数据,在代码中是用了LOOP-END LOOP语法,循环调用FETCH语句提取数据,EXIT WHEN语句在无数据提取后将推出循环。
(3)在提取到数据后,通过分支结构根据学成的成绩判断其绩点赋值给v_mark变量,最后通过update更新该学生科目的绩点,并通过DBMS_OUTPUT进行输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值