Oracle学习笔记十八:PL/SQL变量类型

一、PL/SQL运算符

类型 符号 说明
赋值运算符 := Java 和 C# 中都是等号,PL/SQL 的赋值是 :=
特殊字符 || 字符串连接操作符
-- PL/SQL 中的单行注释
/*,*/ PL/SQL 中的多行注释,多行注释不能嵌套。
<<,>> 标签分隔符,只为了标识程序特殊位置。
.. 范围操作符,比如 1..5 标识从 1 到 5
算术运算符 +,-,*,/ 基本算术运算符
** 求幂操作,比如:3**2=9
关系运算符 >,<,>=,<=,= 基本关系运算符,=表示相等关系,不是赋值。
<>,!= 不等关系
逻辑运算符 AND,OR,NOT 逻辑运算符

二、PL/SQL变量定义

1)PL/SQL块中变量使用前必须先定义,变量必须定义在DECLARE块中。

2)PL/SQL支持 SQL 中的数据类型,PL/SQL 中正常支持 NUMBER、VARCHAR2、DATE 等 Oracle SQL 数据类型。

3)声明变量必须指明变量的数据类型,也可以声明变量时对变量初始化,变量声明必须在声明部分。声明变量的语法是:

语法格式:声明变量

变量名 数据类型[:=初始值]

DECLARE
    sname VARCHAR2(20) := 'jerry';
BEGIN
    sname:=sname||' and tom';
    dbms_output.put_line(sname);
END;

4)可以通过SELECT……INTO语句为变量赋值:

  • 语句从数据库中查询数据对变量进行赋值。

  • 查询的结果只能是一行记录,不能是零行或者多行记录。

declare
    v_name varchar2(20);
begin
    select ename into v_name from emp where empno='1001';
    dbms_output.put_line(v_name);
    exception
        when others then
        dbms_output.put_line('异常');
end;

三、PL/SQL变量数据类型

PL/SQL是强类型的语言,使用变量时必须指定变量的数据类型。PL/SQL常见的数据类型有:

  • varchar2(length)

  • number(n[,m])

  • date/timestamp

  • long 变长大字符串类型

  • boolean 逻辑类型 注意:Oracle SQL 中没有 boolean 类型

  • %rowtype 引用数据库表中一行作为数据类型

  • %type 引用某一个变量或者数据库表中某一列的类型作为当前变量的类型

四、PL/SQL属性类型

1)%rowtype和%type称之为属性类型:

  • 可以使用%type和%rowtype来声明变量,而不必指定特定的数据类型。

  • 这两个属性提供了这种方式:在声明变量时,不指定变量的数据类型,而由表/视图列来定义变量。

2)rowtype类型使用:

declare
    myemp emp%rowtype;
begin
    select * into myemp from emp where empno='1001';
    dbms_output.put_line(myemp.ename);
    exception
        when others then
        dbms_output.put_line('异常');
end;

 3)type类型使用:

declare
    v_name emp.ename%type;
begin
    select ename into v_name from emp where empno='1001';
    dbms_output.put_line(v_name);
    exception
        when others then
        dbms_output.put_line('异常');
end;

五、PL/SQL记录类型

1)Record类型

该类型可以存储由多个列值组成的一行数据。当使用记录类型的变量时,首先需要定义记录的结构,然后再定义记录类型的变量。我们使用 type 关键字来定义记录类型,其语法为:

type 记录类型名 is record

(

  变量1 数据类型,

  变量2 数据类型,

  ……

  变量n 数据类型

);

2)Record类型使用:

declare
    type emp_type is record
    (
        empno emp.empno%type,
        ename emp.ename%type
    );
    v_emp emp_type;
begin
    select empno,ename into v_emp from emp where empno='1001';
    dbms_output.put_line(v_emp.empno || '-' || v_emp.ename);
    exception
        when others then
        dbms_output.put_line('异常');
end;

 

posted @ 2022-06-04 00:11  缥缈的尘埃  阅读(986)  评论(0编辑  收藏  举报