使用PL/SQL

PL/SQL 简介

PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言
PL/SQL 是对 SQL 的扩展
支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构
可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑
与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性、灵活性和安全性

标准SQL没有的特征

变量
控制结构(判断、循环)
自定义的过程和函数
对象类型

PL/SQL 的优点

在这里插入图片描述
在这里插入图片描述

PL/SQL 块简介

在这里插入图片描述

PL/SQL 块举例

在这里插入图片描述

变量和常量

在这里插入图片描述

declare
--定义常量 不可被修改(constant)
  sex constant number :=1;
begin
  dbms_output.put_line(sex);
  end;

数据类型

PL/SQL 支持的内置数据类型
在这里插入图片描述

数字数据类型

指定数值的存储格式
在这里插入图片描述

字符数据类型

字符数据类型包括:
CHAR
VARCHAR2
LONG
RAW
LONG RAW

日期时间和布尔数据类型

日期时间类型

  1. 存储日期和时间数据
  2. 常用的两种日期时间类型
  3. DATE
  4. TIMESTAMP

布尔数据类型
5. 此类别只有一种类型,即BOOLEAN类型
6. 用于存储逻辑值(TRUE、FALSE和NULL)
7. 不能向数据库中插入BOOLEAN数据
8. 不能将列值保存到BOOLEAN变量中
9. 只能对BOOLEAN变量执行逻辑操作

属性类型

用于引用数据库列的数据类型,以及表示表中一行的记录类型
属性类型有两种:

  1. %TYPE - 引用变量和数据库列的数据类型
  2. %ROWTYPE - 提供表示表中一行的记录类型

使用属性类型的优点:

  1. 不需要知道被引用的表列的具体类型
  2. 如果被引用对象的数据类型发生改变,PL/SQL 变量的数据类型也随之改变

icode itemfile.itemcode%TYPE;
emp_rec scott.emp%ROWTYPE;

复合类型

自定义类型

TYPE 属性类型名称 IS RECORD(
属性名 属性类型,
属性名 属性类型,
.
.
.
属性名 属性类型
);

declare
Type au_record IS RECORD(
Author_code char(6),
Name varchar2(10),
Sex number(1)

V_record au_record;
begin
	end;
)

逻辑比较

在这里插入图片描述
布尔表达式的结果为TRUE、FALSE或NULL,通常由逻辑运算符AND、OR和NOT连接

控制结构

PL/SQL 支持的流程控制结构:条件控制IF 语句CASE 语句循环控制LOOP 循环WHILE 循环FOR 循环顺序控制GOTO 语句NULL 语句

条件控制

条件控制

IF

IF实例

declare
  score number :=60;
begin
  if score >=60 then
      dbms_output.put_line('及格');
  end if;
  end;

IF THEN ELSE实例

--if then else的使用
declare
  score number :=50;
begin
  if score >=60 then
      dbms_output.put_line('及格');
      else 
        dbms_output.put_line('不及格');
  end if;
  end;

IF THEN ELESIF实例

--if then elsif
declare
     score number :=&请输入成绩;
begin
  if score>=90 then
    dbms_output.put_line('优秀');
    elsif score>=80 then
    dbms_output.put_line('良好');
    elsif score>=60 then
    dbms_output.put_line('及格');
  else
      dbms_output.put_line('不及格');
  end if;
  end;

CASE

在这里插入图片描述

循环控制

循环控制用于重复执行一系列语句
循环控制语句包括:

  • LOOP、EXIT 和 EXIT WHEN

循环控制的三种类型:

  • LOOP - 无条件循环
  • WHILE - 根据条件循环
  • FOR - 循环固定的次数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

异常处理 机制

在这里插入图片描述
**处理预定义异常处理用户定义异常**

常见异常类型

CURSOR_ALREADY_OPEN 试图"OPEN"一个已经打开的游标
DUP_VAL_ON_INDEX 试图向有"UNIQUE"中插入重复的值
INVALID_CURSOR 试图对以关闭的游标进行操作
INVALID_NUMBER 在SQL语句中将字符转换成数字失败
LOGIN_DENIED 使用无效用户登陆
NO_DATA_FOUND 没有找到数据时
TIMEOUT_ON_RESOURCE Oracle等待资源期间发生超时
TOO_MANY_ROWS "SELECT INTO"返回多行时
VALUE_ERROR 当出现赋值错误
ZERO_DIVIDE 除数为零

引发应用程序错误

RAISE_APPLICATION_ERROR 过程
用于将应用程序专有的错误从服务器端转达到客户端应用程序
用于创建用户定义的错误信息
可以在可执行部分和异常处理部分使用
错误编号必须介于 –20000 和 –20999 之间
错误消息的长度可长达 2048 个字节

引发应用程序错误的语法:

RAISE_APPLICATION_ERROR(errorCode, error_msg);

引发应用程序错误举例

DECLARE
  rate itemfile.itemrate%TYPE;
  rate_exception EXCEPTION;
BEGIN
  SELECT NVL(itemrate,0) INTO rate FROM itemfile 
  WHERE  itemcode = 'i207';
  IF rate = 0 THEN
    RAISE rate_exception;
  ELSE
    DBMS_OUTPUT.PUT_LINE('项费率为:' || rate);
  END IF;
EXCEPTION
  WHEN rate_exception THEN
    RAISE_APPLICATION_ERROR(-20001, '未指定项费率');
END;

总结

PL/SQL 是一种可移植的高性能事务处理语言
PL/SQL 块由声明部分、可执行部分和异常处理部分组成
PL/SQL 数据类型包括标量数据类型
控制结构包括条件控制、循环控制和顺序控制
PL/SQL 支持动态 SQL
运行时出现的错误叫做异常
异常可以分为预定义异常和用户定义的异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值