Oracle12C--变量的声明与赋值(二十五)

知识点的梳理:

  • Oracle定义变量的方式有3 种:
    • 声明并使用变量;
    • 使用%TYPE声明变量类型;
    • 使用%ROWTYPE声明变量类型
  • 可以通过sys登录,使用"v$reserved_words"数据字典查看全部关键字

      

  • 声明并使用变量
    • 变量声明基本规则:
      • PL/SQL是强类型语言,变量都必须在它声明之后才可以使用;
      • 变量不区分大小写;
      • 变量都要在DECLARE部分声明;
      • 变量名称可以由字母,数字,_(下划线),$#组成;
      • 所有的变量名称要求以字母开头,不能是Oracle保留字(关键字);
        • 可以通过sys登录,使用"v$reserved_words"数据字典查看全部关键字
      • 变量的长度最多30个字符;
      • 所有的变量均为局部作用域,它们只在给定的PL/SQL块中有效;
      • 变量的默认值为NULL
        • 示例:

定义变量不设置默认值

DECLARE

v_result VARCHAR2(30) ; -- 此处没有赋值

BEGIN

DBMS_OUTPUT.put_line('v_result的内容〖' || v_result || '') ;

END ;

/

输出结果为空

  • 变量声明语法:

 

变量名称 [constant] 类型 [not null] [:=value];

语句解析:
constant:定义常量,必须在声明时为其赋予默认值;
not null:表示此变量不允许为null;
:=value:在变量声明示,设置初始数据;

  

示例:定义变量
DECLARE

v_resultA NUMBER := 100 ; -- 定义一个变量同时赋值

v_resultB NUMBER ; -- 定义一个变量没有设置内容

BEGIN

v_resultb := 30 ; -- 没有区分大小写

DBMS_OUTPUT.put_line('计算的结果是:' || (v_resultA + v_resultB) ) ;

END ;

/

运行结果:130
分析:此程序采用了两种方式为声明的变量进行赋值:
1.DECLARE中定义变量的时候直接赋值:v_resultA number := 100;
2.DECLARE中定义变量,而后在BEGIN中为变量赋值:v_resultb:=30;
3.v_resultB在赋值时写成了v_resultb依然不影响执行结果;

  • 定义非空变量:

DECLARE

v_resultA NUMBER NOT NULL := 100 ; -- 定义一个非空变量v_resultA,同时赋值

BEGIN

DBMS_OUTPUT.put_line('v_resultA变量内容:' || (v_resultA) ) ;

END ;

/

运行结果:v_resultA变量内容:100

  • 定义常量:

DECLARE

v_resultA CONSTANT NUMBER NOT NULL := 100 ; -- 定义一个常量同时赋值

BEGIN

DBMS_OUTPUT.put_line('v_resultA常量内容:' || (v_resultA) ) ;

END ;

/

运行结果:v_resultA变量内容:100
1.使用constant定义的常量不能在程序中对其参数进行修改。此sql使用了NOT NULL进行定义,实际上是没有任何实际意义的。

  • 使用%TYPE声明变量类型
    • 该声明方式,可以使某一个变量与指定数据表中某一列的类型一样;
      • 语法:

变量定义表名称.字段名称%TYPE

  • 示例: 使用"%TYPE"定义变量

DECLARE

v_eno emp.empno%TYPE ; -- empno类型相同

v_ename emp.ename%TYPE ; -- ename类型相同

BEGIN

DBMS_OUTPUT.put_line('请输入雇员编号:') ;

v_eno := &empno ; -- 由键盘输入雇员编号

SELECT ename INTO v_ename FROM emp WHERE empno= v_eno ;

DBMS_OUTPUT.put_line('编号为:' || v_eno || '雇员的名字为:'|| v_ename) ;

END ;

/

运行:输入empno的值:7369
输出结果:编号为:7369雇员的名字为:SMITH
分析:此程序主要演示了%TYPE变量的使用方式。定义的enoename两个变量的数据类型参考了emp表的empnoename两个字段

  • 使用%ROWTYPE声明变量类型
    • 此标记可以定义表中一行记录的类型;
      • 使用"select…..into…."将表中的一行记录设置到了ROWTYPE类型的变量中时,可以利用"rowtype变量.表字段"的方式取得表中每行的对应列数据
    • 示例:使用ROWTYPE装载一行记录

DECLARE

v_deptRow dept%ROWTYPE ; -- 装载一行dept记录

BEGIN

SELECT * INTO v_deptRow FROM dept WHERE deptno=10 ;

DBMS_OUTPUT.put_line('部门编号:'|| v_deptRow.deptno || ',名称:' || v_deptRow.dname || ',位置:' || v_deptRow.loc) ;

END ;

/

运行结果:部门编号:10,名称:ACCOUNTING,位置:NEW YORK
分析:此
sql定义了deptRowROWTYPE类型变量,之后使用限定查询,查询出10部门的完整信息,并将此行信息设置到deptRow变量中,然后分别利用列名称取得此行中的每列内容。

  • 补充:通过定义专门的集合类型也可以完成与ROWTYPE类型的功能

通过自定义类型接收一行记录:
DECLARE

TYPE dept_type IS RECORD (

dno dept.deptno%TYPE ,

dna dept.dname%TYPE ,

dlo dept.loc%TYPE) ; -- 定义一个新的类型

v_deptRow dept_type ; -- 装载一行dept记录

BEGIN

SELECT * INTO v_deptRow FROM dept WHERE deptno=10 ;

DBMS_OUTPUT.put_line('部门编号:'|| v_deptRow.dno || ',名称:' || v_deptRow.dna || ',位置:' || v_deptRow.dlo) ;

END ;

/

此sql运行结果与上例相同。此方法较为复杂,了解即可

你可能感兴趣的:(基础,Oracle,Oracle12c学习笔记)