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;
相关推荐
码事漫谈42 分钟前
一天搭出 80% 的 Agent,然后卡在 95% 到死
后端
leonkay1 小时前
C# 锁机制——【2】深入原理
开发语言·后端·spring·c#·个人开发
江湖十年1 小时前
在 Go 中使用 dyno 包处理动态对象
后端·面试·go
八角丶1 小时前
Node 网络编程 —— TLS 模块
javascript·后端·node.js
山岚的运维笔记1 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
平头哥AI3 小时前
Day 01 | go run 跑通第一个 Go 程序,go build 留下一个能拷走的 exe
开发语言·后端·golang
ZGG0034 小时前
线程池详解:从 7 大参数到生产避坑
java·数据库·后端
geovindu5 小时前
CSharp: Wordcloud
开发语言·后端·c#·.net·.netcore·词云
geovindu6 小时前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
tedcloud1237 小时前
OpenLogi 怎么搭建?用 Rust 打造一个轻量的 Logitech 外设管理工具
linux·运维·服务器·开发语言·后端·rust·开源