头歌-过程化SQL

任务描述

本关任务:使用过程化 SQL 定义一个变量查询学生信息。

过程化 SQL 的块结构

基本的 SQL 是高度非过程化的语言。嵌入式 SQL 将 SQL 语句嵌入程序设计语言,借助高级语言的控制功能实现过程化。过程化 SQL 是对 SQL 的扩展,使其增加了过程化语句功能。

过程化 SQL 程序的基本结构是块。所有的过程化 SQL 程序都是由块组成。这些块之间可以互相嵌套,每个块完成一个逻辑操作。

变量和常量的定义

变量定义
  1. 变量名 数据类型 [[NOT NULL]:=初值表达式]
  2. 变量名 数据类型 [[NOT NULL] 初值表达式]
常量定义
  1. 常量名 数据类型 CONSTANT:= 常量表达式

常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。如果试图修改它,过程化 SQL 将返回一个异常。

赋值语句
  1. 变量名:=表达式

过程化 SQL 的基本结构如下:

  1. begin -- 执行开始
  2. declare 变量名 数据类型 -- 定义变量、常量、游标、异常等等
  3. set 变量名=(select 所需值列名 from 表名 where 所需列名=具体值); -- 变量赋值
  4. -- sql语句及流程控制语句等
  5. exception -- 异常处理
  6. --异常处理部分
  7. end -- 执行结束
流程控制

过程化 SQL 提供了流程控制语句,主要有条件控制语句和循环控制语句。这些语句的语法、语义和一般的高级语言类似。

条件控制语句

一般有三种形式的 IF 语句:IF-THEN 语句、IF-THEN-ELSE 语句和嵌套的 IF 语句。

  1. IF 语句
  1. IF condition THEN
  2. Sequence_of_statements; /*条件为真时语句序列才被执行*/
  3. END IF; /*条件为假或NULL时什么也不做。控制转移至下一个语句*/

  1. IF-THEN 语句
  1. IF condition THEN
  2. Sequence_of_statements1; /*条件为真时语句序列1*/
  3. ELSE
  4. Sequence_of_statements2; /*条件为假或NULL时语句序列2*/
  5. END IF;
  1. 嵌套的 IF 语句

在 THEN 和 ELSE 子句中话可以再包含 IF 语句,即 IF 语句可以嵌套。

  1. IF condition1 THEN
  2. IF condition2 THEN
  3. Sequence_of_statements; /*条件condition1和condition2都为真时语句序列才被执行*/
  4. END IF;
  5. END IF;
循环控制语句

过程化 SQL 有三种循环结构:LOOP,WHILE-LOOP 和 FOR-LOOP:

  1. LOOP 循环语句
  1. LOOP
  2. Sequence_of_statements; /*循环体,一组过程化 SQL 语句*/
  3. END LOOP;

多数数据库服务器的过程化 SQL 都提供 EXIT、BREAK 或 LEAVE 等循环结束语句,以保证 LOOP 语句块能够再适当的条件下提前结束。

  1. WHILE-LOOP 循环语句
  1. WHILE condition LOOP
  2. Sequence_of_statements; /*条件为真时执行循环体内的语句序列*/
  3. END LOOP;

每次执行循环体语句之前首先要对田间进行求值,如果条件为真则执行循环体内的语句序列,如果条件为假则跳过循环并把控制传递给下一个语句。

  1. FOR-LOOP 循环语句
  1. FOR count IN [REVERSE] bound1..bound2 LOOP
  2. Sequence_of_statements;
  3. END LOOP;

FOR 循环的基本执行过程是:将 count 设置为循环的下界 bound1,检查它是否小于上界 bound2。当指定 REVERSE 时则将 count 设置为循环的上界 bound2,检查 count 是否大于下界 bound1。如果越界则执行跳出循环,否则执行循环体,然后按照步长(+1或-1)更新 count 的值,重新判断条件。

错误处理

如果过程化 SQL 在执行时出现异常,则应该让程序在产生异常的语句处停下来,根据异常的类型区执行异常处理语句。SQL 标准对数据库服务器提供什么样的异常处理做出了建议,要求过程化 SQL 管理器提供完善的异常处理机制。

编程要求

在右侧编辑器补充代码,在右侧编辑器Begin-End处补充代码,使用过程化 SQL 定义一个变量查询stuNo='01'的学生信息并用 IF 语句进行判断变量的值为“杨mi”时才进行查询。学生信息表的结构和数据如下:

学生信息表结构:

字段名称类型备注约束
stuNovarchar(10)编码主码
stuNamevarchar(50)姓名
stuAgeint年龄
stuSexvarchar(4)性别

学生信息表数据:

stuNostuNamestuAgestuSex
01杨mi28
03刘双32

测试说明

平台会对你编写的代码进行测试:

预期输出:

  1. stuNo stuName stuAge stuSex
  2. 01 杨mi 28 女

代码:

########## 使用过程化 SQL 定义一个变量查询stuNo='01'的学生信息  ##########
delimiter //
create PROCEDURE stu()

#请在此处添加实现代码
########## Begin ##########
begin
declare studentName varchar(50);
select stuName into studentName from student where stuNo="01";
IF studentName="杨mi" THEN 
    select * from student where stuNo="01";
END IF;  
end 
########## End ##########
//
delimiter ;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值