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;