PL/SQL学习笔记

本文详细介绍了PL/SQL的基本概念和用法,包括声明部分、执行部分和异常处理部分。讲解了命名规则、%type的使用、记录类型、流程控制(条件判断和循环结构)、游标、异常处理、存储函数和存储过程以及触发器的应用,为数据库编程提供全面指导。
摘要由CSDN通过智能技术生成

PL/SQL块

PL/SQL程序由三个块组成,即声明部分执行部分异常处理部分
声明部分:declare
执行部分:begin
异常处理部分:exception

执行步骤

  1. 在命令行输入 set serveroutput on
  2. ed
  3. 在文本框中以这样的结构写PL/SQL
    declare
     --声明的变量
    begin
     --程序执行部分
    exception
     --针对begin块中出现的异常,提供处理的机制
     --when … then …
     --when … then…
    end;

命名规则

名称 规则
程序变量 v_name
程序常量 c_name
游标变量 name_curor
异常标识 e_name
表类型 name_table_type
name_table
记录类型 name_record

例1:查询员工编号为100的员工的工资,email,入职日期

declare
  v_sal number(20);
  v_email varchar2(20);
  v_hire_date date;
begin
  select salary,email,haire_date into v_sal,v_email,v_hire_date from employees where employee_id=100;
  dbms_output.put_line(v_sal||','||v_email||','||v_hire_date);
end;

使用%type

作用
 定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以用%type

优点
 所引用的数据库列的数据类型可以不必知道
 所引用的数据库列的数据类型可以实时改变
例1:查询员工编号为100的员工的工资,email,入职日期(动态获取变量类型)

declare
  v_sal employees.salary%type;
  v_email employees.email%type;
  v_hire_date employees.hire_date%type;
begin
  select salary,email,hire_date into v_sal,v_email,v_hire_date from employees where employee_id=100;
  dbms_output.put_line(v_sal||','||v_email||','||v_hire_date);
end;

记录类型

什么是记录类型?
记录类型是把逻辑相关的数据最为一个单元存储起来,称作PL/SQL RECORD的域,其作用是存放不相同但逻辑相关的信息。
可以将多个变量放入一个记录类型中,类似于java的类。

声明记录类型的格式:
type ... is record(变量1,变量2,...);

定义一个记录类型的成员变量:
v_name 记录类型名;

例1:查询员工编号为100的员工的工资,email,入职日期(使用记录类型)

declare
  --声明一个记录类型
  type emp_record is record(
  v_sal employees.salary%type,
  v_email employees.email%type,
  v_hire_date employees.hire_date%type
  );
  --定义一个记录类型的成员变量
  v_emp_record emp_record;
begin
  select salary,email,hire_date into v_emp_record from employees where employee_id=100;
  dbms_output.put_line(v_emp_record.v_sal||','||v_emp_record.v_email||','||v_emp_record.v_hire_date);
end;

例2:使用%rowtype可以将整张表的所有数据类型声明在一块(employees表)

declare
  v_emp_record employees%rowtype;
begin
  select * into v_emp_record 
  from employees
  where employee_id = 100;
  dbms_output.put_line('employee_id:'||v_emp_record.employee_id||' salary:'||v_emp_record.salary);
end;

例3:动态获取SQL(动态获取employee_id)

declare
  v_emp_record employees%rowtype;
  v_emp_id employees%type;
begin
  select * into v_emp_record 
  from employees
  where employee_id = v_emp_id;
  dbms_output.put_line('employee_id:'||v_emp_record.employee_id||' salary:'||v_emp_record.salary);
end;

流程控制

条件判断(两种)

第一种:if...then elsif then...else...end if;

例1:查询出150号员工的工资,若大于10000,打印"salary>=10000";若在5000-10000,
打印"5000<=salary<=10000";否则打印"salary<5000"
写法1:

declare
  v_sal employees.salary%type;
begin
  select salary into v_sal from employees where employee_id=150;
  if v_sal>=10000 then dbms_output.put_line('salary>=10000');
  elsif v_sal >=5000 then dbms_output.put_line('5000<=salary<=10000');
  else dbms_output.put_line('salary<=5000');
  end if;
end;

写法2:

declare
  v_sal employees.salary%
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值