阅读918 返回首页    go 阿里云 go 技术社区[云栖]


PL/SQL学习笔记(二)

定义并使用变量

PL/SQL有四种类型:标量类型,复合类型,引用类型(reference),LOB(Large Obejct)类型

一.标量类型

最常用的就是标量类型,是指只能存放单个数值的变量,包括数字类型、字符类型、日期类型和布尔类型,每种类型又包含相应的子类型。

常量标量类型如下:

 

None.gifVARCHAR2 (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一样的赋值符号@_@

例子:

 

None.gifv_name  VARCHAR2 ( 10 );
None.gif
None.gifv_rate CONSTANTS 
NUMBER ( 4 , 2 ) : = 3.04 ;
None.gif

 

为了防止定义的变量类型与表中的字段类型不一致,可以使用%TYPE来定义:

 

None.gifv_name employee.name % TYPE;

 

如上面所示,v_name的类型就与表employee中的name字段类型一样!!

二。复合变量:

用于存放多个值的变量称为复合变量,包括PL/SQL记录,PL/SQL表,嵌套表和VARRAY四种类型

1。PL/SQL记录

类似于C/C++中的结构概念:

 

None.gifdeclare
None.gif   TYPE employee_record 
is  RECORD(
None.gif     id employee.id
% TYPE,
None.gif     name employee.name
% TYPE,
None.gif     email employee.email
% TYPE);
None.gif   em_record employee_record;
None.gif
begin
None.gif   
select  id,name,email  into  em_record  from  employee  where  name =& name;
None.gif   dbms_output.put_line(
' 雇员名: ' || em_record.name || '  雇员ID: ' || em_record.id);
None.gif
end

 

2。PL/SQL表,类似于数组概念,不同的是PL/SQL表允许负值下标,而且没有上下限,如:

 

None.gifdeclare
None.gif   TYPE employee_table 
is   table   of  employee.name % TYPE  index   by  BINaRY_INTEGER;
None.gif   em_table employee_table;
None.gif
begin
None.gif   
select  name  into  em_table( - 1 from  employee  where  name =& name;
None.gif   dbms_output.put_line(
' 雇员名: ' || em_table( - 1 ));
None.gif
end

 

3。嵌套表,与PL/SQL表相似,不同的是嵌套表可以做表列的数据类型,而PL/SQL表不能,使用嵌套表作为表列时,必须为其指定专门的存储表,如:

 

None.gifcreate   or   replace  TYPE emp_type   as  OBJECT(
None.gif  name 
VARCHAR2 ( 10 ),salary  NUMBER ( 6 , 2 ),hiredate DATE);
None.gif
None.gif
CREATE   OR   REPLACE  TYPE emp_array  IS   TABLE   OF  emp_type;
None.gif
None.gif 
CREATE   TABLE  department(
None.gif    deptno 
NUMBER ( 2 ),dname  VARCHAR2 ( 10 ),
None.gif    employee emp_array)NESTED 
TABLE  employee STORE  as  employee_dept;
None.gif

 

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语句的游标称为动态游标,如:

 

None.gif  DECLARE  
None.gif     TYPE c1 
IS  REF  CURSOR ;
None.gif     emp_cursor c1;
None.gif     v_name employee.name
% TYPE;
None.gif     v_sal employee.salary
% TYPE;
None.gif    
begin
None.gif     
open  emp_cursor  for
None.gif       
SELECT  name,salary  FROM  EMPLOYEE ;
None.gif     LOOP
None.gif       
FETCH  emp_cursor  INTO  v_name,v_sal;
None.gif       
EXIT   WHEN  emp_cursor % NOTFOUND;
None.gif       dbms_output.put_line(v_name);
None.gif     
END  LOOP;
None.gif     
close  emp_cursor;
None.gif    
end ;  

  

2。REF OBJECT,与JAVA的引用概念相同,存储的是指向对象的指针

 

四。LOB类型

LOB类型是指用于存储大批量数据的变量,包括内部的3种(CLOB,BLOB,NCLOB)和外部LOB(BFILE)。

CLOB,NCLOB用于存储大量的字符数据。

BLOB用于存储大批量二进制数据(如图象)。

BFILE则存储指向OS文件的指针。

文章转自庄周梦蝶  ,原文发布时间5.17

最后更新:2017-05-17 11:32:31

  上一篇:go  D-News | “云计算与大数据”重点专项2017年度第二次总体专家组会议在京召开
  下一篇:go  那些年,任天堂发布的游戏机们