变量包括有:
1) 标量类型(scalar)
2) 复合类型(composite)
3) 参照类型(reference)
4) Lob(large object)
1.1.1 标量类型– 常用类型
pl/sql定义变量和常量的语法如下:
identifier [constant] datatype [not null] [:=| default expr]
identifier:名称
constant:指定常量
datatype:数据类型
not null:指定变量值不能为null
:= 给变量或是常量指定初始值
Default 用于指定初始值
Expr:指定初始值的pl/sql表达式,可是文本值、其它变量、函数等
案例:
1、 定义一个变长字符串 v_ename varchar2(10) 2、 定义一个小数 范围-9999.99 ~9999.99 V_sal number(6,2) := 5.4 3、 定义一个日期类型 V_hiredate date 4、 定义一个布尔变量,不能为空,初始值为false V_valid Boolean not null default false; |
使用%type属性定义变量按照数据库列来确定你定义的变量的类型和长度。
Declare V_ename emp.ename%type; Begin Select ename into v_ename from emp where empno = &no; End |
1.1.2 复合类型
用于存放多个值的变量,主要包括这几种:
1、 pl/sql记录
类似于高级语言中的结构体,例如:
Declare --定义一个pl/sql记录类型emp_record,包含两个数据name,salary Type emp_record is record(name emp.ename%type,salary emp.sal%type); -- 定义了一个类型为emp_record的sp_record变量 sp_record emp_record; begin select ename,sal into sp_record from emp where empno=&empno; dbms_output.put_line(‘员工名:’|| sp_record.name ); end |
%ROWTYPE
Record_name [schema.]table_name%ROWTYPE
将记录声明为数据库的相同结构。
2、 pl/sql表
类似于高级语言中的数组,并且pl/sql中可以下标为负数,而且表元素的下标没有限制,例如:
Declare -- 定义了一个pl/sql表类型sp_table_type,该类型用于存放emp.ename%type的数组 -- index by binary_integer 表示下标是整数 Type sp_table_type is table of emp.ename%type index by binary_integer; -- 定义了一个类型为sp_table_type的Sp_table变量 Sp_table sp_table_type; Begin Select ename into sp_table(0) from emp where empno=7788; Dbms_output.put_line(‘员工名:’||Sp_table(0)); End |
3、 嵌套表
4、 Varray
1.1.3 参照变量
是指用于存放数值指针的变量,通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间,在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量(ref obj_type)两种参照变量类型。
ref cursor游标变量
Declare -- 定义游标类型 Type sp_emp_cursor is ref cursor; -- 定义一个游标变量 Test_cursor sp_emp_cursor; V_ename emp.ename%type; V_sal emp.sal%type; Begin Open test_cursor for select ename,sal from emp where deptno=&no; Loop Fetch test_cursor into v_ename,v_sal; Exit when test_cursor%notfound; Dbms_output.put_line(‘员工名:’||v_ename||’ 工资:’v_sal); End loop End |