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;
相关推荐
艾伦~耶格尔2 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
man20172 小时前
基于spring boot的篮球论坛系统
java·spring boot·后端
攸攸太上2 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
罗曼蒂克在消亡3 小时前
graphql--快速了解graphql特点
后端·graphql
潘多编程3 小时前
Spring Boot与GraphQL:现代化API设计
spring boot·后端·graphql
大神薯条老师3 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
2401_857622664 小时前
Spring Boot新闻推荐系统:性能优化策略
java·spring boot·后端
知否技术4 小时前
为什么nodejs成为后端开发者的新宠?
前端·后端·node.js
AskHarries5 小时前
如何优雅的处理NPE问题?
java·spring boot·后端
计算机学姐5 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis