09oracle之PLSQL概念和目的、变量(普通变量、引用型变量、记录型变量)

概念和目的:

  • 什么是PL/SQL?

  • PL/SQL(Procedure Language/SQL) 程序语言

  • PLSQL是Oracle对sql语言的过程化扩展

  • 指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。(具有编程的能力)

  • 为什么要学习plsql?

  • 1.将sql逻辑写在db层,效率更高----数据库处理数据更专业,还不需要网络数据交换。

  • 2.为存储过程、函数等打下基础,前提是学会plsql

结构分析:

--declare --声明部分:没有变量,则declare可以省略
 --你不需要变量声明,则不需要写任何东西
BEGIN--程序体的开始:编写语句逻辑
    --在控制台输出一句话:dbms_output相当于system.out类,内置程序包,put_line:相当于println()方法
  dbms_output.put_line('Hello World');
    --dbms_output.put('Hello World');

end;--程序体的结束

概念:程序包:dbms_output相当于java中的类(system.out),它是oracle自带的,内置.
调用程序包:dbms_output.put_line(‘Hello World!’)相当于java的方法

变量:

声明部分可以定义变量,定义变量的语法:

变量名 [CONSTANT] 数据类型;

在这里插入图片描述

常见的几种变量类型的定义方法,分两大类:

  1. 普通数据类型(char, varchar2, date, number, boolean, long):
    在这里插入图片描述
  2. 特殊变量类型(引用型变量、记录型变量):
    在这里插入图片描述
  • 普通变量赋值:
    在ORACLE中有两种赋值方式:
    1,直接赋值语句 :=
    2, 使用select …into … 赋值:(语法;select 值 into 变量)

示例:

--打印两个变量的值,两个变量的值分别采用两种不同的赋值方法:
DECLARE--声明变量
  --姓名
  v_name VARCHAR(20) :='Bo';--声明的时候直接赋值
  --薪资
  v_sal NUMBER;
  --工作地点
  v_local VARCHAR(200);
BEGIN --开始程序逻辑
  --程序运行时赋值
  --方法一:--直接赋值
  v_sal :=9999;
  --方法二:语句赋值
  SELECT '上海' INTO v_local FROM dual;
  --输出打印
  dbms_output.put_line('姓名:'||v_name||',薪资:'||v_sal||',工作地点:'||v_local);  
END;--程序结束

plsql中有两种不同的赋值方法:
一种是: 直接用:=来赋值
另一种:select 值 into 变量 from 表名。

  • 引用型变量:
    引用变量:引用表中字段的类型 (推荐使用引用类型)
    %type 例: v_ename emp.ename%type;
    使用emp表的字段ename的数据类型作为v_ename的数据类型.

示例:

--查询并打印7839号(老大)员工的姓名和薪水
DECLARE
  --定义变量
  --姓名
  v_ename emp.ename%TYPE;--姓名使用的emp表中的ename的字段的数据类型
  --薪水
  v_sal emp.sal%TYPE;--你不需要关心具体什么数据类型了

BEGIN
   --赋值
  --注意:into前后字段名和变量名必须对应(不管是数据类型,还是个数,顺序)
  --必须:查询的结果必须只有一个值,不能有多行记录
   SELECT ename,sal INTO v_ename,v_sal FROM emp WHERE empno=7839;  
  --打印
  dbms_output.put_line('7839号员工的姓名是:'||v_ename||',薪资'||v_sal);
END;

引用类型的好处:

  1. 使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑列的类型
  2. 使用引用类型,当列中的数据类型发生改变,不需要修改变量的类型。而使用普通方式,当列的类型改变时,需要修改变量的类型
  3. 使用%TYPE是非常好的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新。
  • 记录型变量:
  • 记录型变量,代表一行,可以理解为数组,里面元素是每一字段值。
  • %rowtype 引用一条(行)记录的类型 例:v_emp emp%rowtype;
  • 含义:v_emp 变量代表emp表中的一行数据的类型,它可以存储emp表中的任意一行数据。
    记录型变量分量的引用方式:
    在这里插入图片描述

示例:

--查询并打印7839号(老大)员工的姓名和薪水
DECLARE
  --记录型变量
  v_emp emp%ROWTYPE;--该变量可以存储emp表中的一行记录

BEGIN
   --赋值
   --默认情况下,必须是全字段赋值
   SELECT * INTO v_emp FROM emp WHERE empno=7839;    
  --打印
  dbms_output.put_line('7839号员工的姓名是:'||v_emp.ename||',薪资'||v_emp.sal);
END;

错误的使用:

  1. 记录型变量只能存储一个完整的行数据
  2. 返回的行太多了,记录型变量也接收不了
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值