-
定义并使用变量
在编写PL/SQL程序时,可以使用标量类型、符合类型、参照类型和LOB类型等四种类型。
-
常用标量类型
-
VARCHAR2(n) 其数值的长度不应该超过4000字节
-
CHAR(N) 其数值的长度不应该超过2000字节
-
NUMBER(P,S)
-
DATE 其数据长度为固定长度(7字节)
-
TIMESTAMP 当显示TIMESTAMP变量数据时,不仅会显示日期,而且还会显示时间和上下午标记
-
LONG和LONGRAW LONG数据类型用于定义变长字符串,其字符串的最大长度为32760字节;LONG RAW数据类型用于定义变长的二进制数据,其数据最大长度为32760字节。
-
BOOLEAN 该数据类型是PL/SQL数据类型,表列不能采用该数据类型。
-
BINARY_INTEGER该数据类型是PL/SQL数据类型,表列不能采用该数据类型。
-
BINARY_FLOAT和BINARYDOUBLE
-
NVARCHAR2(n)
VARCHAR2(n)和NVARCHAR2(n)的区别:
NVARCHAR2 一个中文字当一个字符来处理。
VARCHAR2 一个中文字当两个字符来处理。
-
定义标量变量
v_enamevarchar2(10);
v_sal number(6,2);
v_sal2 number(6,2):=5.4;
-
使用%type属性
declare
v_enameemp.ename%type;
begin
end;
-
复合变量
-
PL/SQL记录
-
PL/SQL表
-
嵌套表
-
VARRAY
-
PL/SQL记录类似于高级语言中的结构体
declare
type emp_record_type is record(empname emp.name%type , sal emp.sal%type , title emp.job%type);
--定义一个sp_record变量,这个变量类型是emp_record_type
sp_recordemp_record_type;
begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('员工名:'||sp_record.empname);
end;
-
PL/SQL表相当于高级语言中的数组。但PL/SQL中下表可以为负数,并且表元素的下表没有限制。
declare
type sp_table_type is table of emp.ename%type index by binary_integer;--下标是整数
sp_tablesp_table_type;
begin
select ename into sp_table(0) from emp where empno=7788;
cbms_output.put_line('员工名:'||sp_table(0));
end;
-
参照变量
-
游标变量 REF CURSOR
-
对象类型变量 REF obj_type
-
REF CURSOR
declare
--定义游标类型
type sp_emp_cursor is ref cursor;
--定义一个游标变量
test_cursorsp_emp_cursor;
v_enameemp.ename%type;
v_salemp.sal%type;
begin
--把test_cursor和一个select结合
open test_cursor for select ename,sal from emp where deptno=&no;
--循环取出
loop
fetch test_cursor into v_ename,v_sal;
--判断test_cursor是否为空
exit when test_cursor%notfound;
dbms_output.put_line('名字:'||v_ename ||' 工资:'||v_sal);
end loop;
end;
-
LOB变量
LOB变量是指用于存储大批量数据的变量。Oracle将LOB分为两种:内部LOB和外部LOB。内部LOB包括CLOB,BLOB和NCLOB三种类型,它们的数值被存储在数据库中,并且支持事务操作(提交,回退,保存点)。
外部LOB只有BFILE一种类型,该类型的数据被存储在OS文件中,并且不支持事务操作。
CLOB/NCLOB用于存储大批量字符数据,BLOB用于存储大批量二进制数据,而BFILE则存储指向OS文件的指针。