PL/SQL有四种类型:标量类型,复合类型,引用类型(reference),LOB(Large Obejct)类型
一.标量类型
最常用的就是标量类型,是指只能存放单个数值的变量,包括数字类型、字符类型、日期类型和布尔类型,每种类型又包含相应的子类型。
常量标量类型如下:
VARCHAR2 (n) , CHAR (n), NUMBER (p,s),DATE, TIMESTAMP , LONG , LONG RAW ,BOOLEAN,BINARY_INTEGER(仅PL / SQL使用),BINARY_FLOAT和BINARY_DOUBLE(10g新引入的)
定义标量:
identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]
使用标量需要注意的是=号被:=取代,与delphi一样的赋值符号@_@
例子:
v_name VARCHAR2 ( 10 );v_rate CONSTANTS NUMBER ( 4 , 2 ) : = 3.04 ;
为了防止定义的变量类型与表中的字段类型不一致,可以使用%TYPE来定义:
v_name employee.name % TYPE;
如上面所示,v_name的类型就与表employee中的name字段类型一样!!
二。复合变量:
用于存放多个值的变量称为复合变量,包括PL/SQL记录,PL/SQL表,嵌套表和VARRAY四种类型
1。PL/SQL记录
类似于C/C++中的结构概念:
declare TYPE employee_record is RECORD( id employee.id % TYPE, name employee.name % TYPE, email employee.email % TYPE); em_record employee_record; begin select id,name,email into em_record from employee where name =& name; dbms_output.put_line( ' 雇员名: ' || em_record.name || ' 雇员ID: ' || em_record.id); end ;
2。PL/SQL表,类似于数组概念,不同的是PL/SQL表允许负值下标,而且没有上下限,如:
declare TYPE employee_table is table of employee.name % TYPE index by BINaRY_INTEGER; em_table employee_table; begin select name into em_table( - 1 ) from employee where name =& name; dbms_output.put_line( ' 雇员名: ' || em_table( - 1 )); end ;
3。嵌套表,与PL/SQL表相似,不同的是嵌套表可以做表列的数据类型,而PL/SQL表不能,使用嵌套表作为表列时,必须为其指定专门的存储表,如:
create or replace TYPE emp_type as OBJECT( name VARCHAR2 ( 10 ),salary NUMBER ( 6 , 2 ),hiredate DATE); CREATE OR REPLACE TYPE emp_array IS TABLE OF emp_type; CREATE TABLE department( deptno NUMBER ( 2 ),dname VARCHAR2 ( 10 ), employee emp_array)NESTED TABLE employee STORE as employee_dept;
4。VARRAY(变长数组),与嵌套表相似,也可以做为表列的数据类型,但是嵌套表没有个数限制,而VARRAY有个数限制,如:
CREATE TYPE TEST_ARRAY IS VARRAY(20) OF emp_type;
三。引用变量(reference)
类似于C++中的指针或者JAVA中引用的概念,用于存放数值指针的变量,使用此变量,可以使得应用程序共享相同对象,降低占用空间。此类有两种类型:游标(REF CURSOR)和对象类型(REF OBJECT)
1。REF CURSOR,定义时同时指定SELECT语句的游标称为显式或者静态游标,在打开时才指定SELECT语句的游标称为动态游标,如:
DECLARE TYPE c1 IS REF CURSOR ; emp_cursor c1; v_name employee.name % TYPE; v_sal employee.salary % TYPE; begin open emp_cursor for SELECT name,salary FROM EMPLOYEE ; LOOP FETCH emp_cursor INTO v_name,v_sal; EXIT WHEN emp_cursor % NOTFOUND; dbms_output.put_line(v_name); END LOOP; close emp_cursor; end ;
2。REF OBJECT,与JAVA的引用概念相同,存储的是指向对象的指针
四。LOB类型
LOB类型是指用于存储大批量数据的变量,包括内部的3种(CLOB,BLOB,NCLOB)和外部LOB(BFILE)。
CLOB,NCLOB用于存储大量的字符数据。
BLOB用于存储大批量二进制数据(如图象)。
BFILE则存储指向OS文件的指针。
文章转自庄周梦蝶 ,原文发布时间5.17
相关资源:敏捷开发V1.0.pptx