PLSQL 基础语法(二)

一、条件判断

1.1 需求

不同工资区间有不同的税率,计算税后工资

1.2 语句

ini 复制代码
-- 条件判断
declare 
  tax1 number(10,2);
  tax2 number(10,2);
  tax3 number(10,2); 
  employee employees%rowtype;
  money number(10,2);
begin
  tax1:=1;
  tax2:=0.97;
  tax3:=0.95;
  select * into employee from employees where employee_id = 100 ;   
  -- 计算阶梯工资
  if employee.salary<=5000
    then money:=employee.salary * tax1;
  elsif employee.salary<=10000
    then money:=employee.salary * tax2;
  else
    money:=employee.salary * tax3;
  end if;
    
  DBMS_OUTPUT.put_line('工资:'||employee.salary || ',扣完税后为:'||money);
exception
  when no_data_found then
     DBMS_OUTPUT.put_line('没有找到该用户');
 when too_many_rows then
     DBMS_OUTPUT.put_line('存在多条符合条件的数据');
end;

二、循环

2.1 无条件循环

2.1.1 语法结构

arduino 复制代码
loop
 -- 循环语句
end loop;

2.1.2 范例

输出从1开始的100个数

vbnet 复制代码
declare
  num number :=1;
begin
  loop
    dbms_output.put_line(num);
    num := num+1;
    exit when num > 100;
  end loop;
end;

2.2 条件循环

2.2.1 语法结构

arduino 复制代码
while 条件
loop
    -- 循环语句
end loop;

2.2.2 范例

dart 复制代码
declare
  num number;
begin
  num:=1;  
  while num<=100
  loop
    dbms_output.put_line(num);
    num := num+1;
  end loop;
end;

2.3 for循环

arduino 复制代码
declare
  num number;
begin
  
  for num in 1 .. 100
  loop
    dbms_output.put_line(num);
  end loop;
  
end;

三、游标

3.1 语法结构

声明游标

sql 复制代码
cursor 游标名称 is SQL语句

使用游标

sql 复制代码
open 游标名称
loop
    fetch 游标名称 into 变量
    exit when 游标名称%notfound
end loop;
close 游标名称

3.2 范例

3.2.1 需求

输出 job_id 为 AD_VP 的员工薪资信息

3.2.2 语句

sql 复制代码
declare 
  cursor cur_employee is select * from EMPLOYEES t where job_id = 'AD_VP'; --申明游标
  employee employees%rowtype;
begin
  open cur_employee; --打开游标
  loop
    fetch cur_employee into employee; --提取游标
    exit when cur_employee%notfound; --退出游标标识
    dbms_output.put_line('员工id为' || employee.employee_id || '的薪资为'||employee.salary);
  end loop;
  close cur_employee; -- 关闭游标
end;

3.3 带参数的游标

sql 复制代码
declare 
  cursor cur_employee(type char) is select * from EMPLOYEES t where job_id = type; --申明游标
  employee employees%rowtype;
begin
  open cur_employee('IT_PROG'); --打开游标
  loop
    fetch cur_employee into employee; --提取游标
    exit when cur_employee%notfound; --退出游标标识
    dbms_output.put_line('员工id为' || employee.employee_id || '的薪资为'||employee.salary);
  end loop;
  close cur_employee; -- 关闭游标
end;

3.4 for 循环游标

sql 复制代码
-- for 循环游标
declare 
  cursor cur_employee(type char) is select * from EMPLOYEES t where job_id = type; --申明游标
  employee employees%rowtype;
begin
  for employee in cur_employee('IT_PROG')
  loop
    dbms_output.put_line('员工id为' || employee.employee_id || '的薪资为'||employee.salary);
  end loop;
end;
相关推荐
程序猿-瑞瑞几秒前
24 go语言(golang) - gorm框架安装及使用案例详解
开发语言·后端·golang·gorm
组合缺一4 分钟前
Solon v3.0.5 发布!(Spring 可以退休了吗?)
java·后端·spring·solon
猿来入此小猿8 分钟前
基于SpringBoot在线音乐系统平台功能实现十二
java·spring boot·后端·毕业设计·音乐系统·音乐平台·毕业源码
愤怒的代码21 分钟前
Spring Boot对访问密钥加解密——HMAC-SHA256
java·spring boot·后端
栗豆包38 分钟前
w118共享汽车管理系统
java·spring boot·后端·spring·tomcat·maven
万亿少女的梦1681 小时前
基于Spring Boot的网络购物商城的设计与实现
java·spring boot·后端
开心工作室_kaic2 小时前
springboot485基于springboot的宠物健康顾问系统(论文+源码)_kaic
spring boot·后端·宠物
0zxm2 小时前
08 Django - Django媒体文件&静态文件&文件上传
数据库·后端·python·django·sqlite
刘大辉在路上10 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
追逐时光者11 小时前
免费、简单、直观的数据库设计工具和 SQL 生成器
后端·mysql