PL/SQL学习笔记(二)

定义并使用变量

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

时间: 2024-08-02 08:03:06

PL/SQL学习笔记(二)的相关文章

PL/SQL学习笔记(索引贴)

我前段时间写了T-SQL学习笔记得到了许多朋友的支持当然也有一些朋友提出了质疑,在此一并表示感谢最近项目中用到Oracle,于是萌生了写PL/SQL学习笔记的念头.同时也希望得到大家的支持或批评.并非常希望能和朋友们一起讨论相关知识. 这是一个有一点T-SQL基础的.刚入门者的学习笔记,以Oracle  10g为讲解对象没有涉及到高级话题如果对哪篇文章有疑问,可以在文章下留言我会尽快回复的 下面我为这个系列文章做一个索引 一: 常量变量及数据类型初步       1:常量变量       2:数

Oracle之PL/SQL学习笔记

自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正.   PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言. PL---Procedural Language. SQL-Structure QueryLanguage.PL/SQL包括过程化语句和SQL语句     PL/SQL的单位:块. 一个块中可以

PL/SQL学习笔记(一)

笔记 一.PL/SQL中的数据类型,简列如下: Number[(m,n)]  唯一的数值类型.m-精度,n-小数位数.INTEGER.REAL是NUMBER的同义词定义的. VARCHAR2(maxsize[CHAR|BYTE])唯一的字符串类型.CHAR.VACHAR是VARCHAR2的同义词定义的.NVARCHAR2与VARCHAR2的表现形势一样,只是用于国际字符集数据类型. DATE 日期/时间类型. BOOLEAN布尔型.只有TRUE.FALSE两个值. 二.PL/SQL的执行体 DE

PL/SQL学习笔记(四)

这部分主要讲述在PL/SQL中如何访问oracle (一)检索单行数据 在PL/SQL嵌入select语句,使用方法: SELECT select_list INTO variable_name1,variable_name2,variable_name3... FROM TABLE WHRE condition 例:   DECLARE   v_sal  NUMBER ( 6 , 2 );  v_id  NUMBER ; BEGIN   v_id: = ' &id ' ;   SELECT  

PL/SQL学习笔记(一)

断断续续学过,这次系统地来读读. (一) PL/SQL是oracle在标准SQL语言上的过程性扩展,它不仅允许嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构(条件语句和循环语句),允许使用异常处理oracle错误等.通过使用PL/SQL,可以在一个PL/SQL块中包含多条SQL语句和PL/SQL语句.PL/SQL具有以下优点: 1.提高应用系统的运行性能. 通过使用PL/SQL块包含多条SQL语句,从而减少了SQL语句的发送次数,降低了网络开销,提高了应用程序性能 2.提供模块化的程序

PL/SQL学习笔记-常量变量及数据类型初步

一:常量和变量 开始之前,还是照例做个经典的例子,如下: declare mydate varchar2(16) := 'hellow world'; begin dbms_output.put_line(mydate); end; declare是声明部分我在这个部分声明了varchar2类型的变量,名字叫mydata,内容是hellow world,长度是16个长度.begin-.end 部分是执行部分我在这里调用了oracle已有的过程dbms_output.put_line,这个过程起到

PL/SQL学习笔记-索引

一:索引描述一个索引可以由一个或多个列组成对列设置索引其实就是对列的内容按一定的方式进行排序检索数据的时候,检索排过序的数据检索到最后一个有效数据之后就跳出检索这样就不必进行全表扫描了,同时可以应用很多算法提高检索效率数据库多用二分法检索数据 二:索引分类1  唯一索引(Unique)不允许列内有重复的值2  非唯一索引(normal)允许列内有重复的值(默认创建非唯一索引)3  位图索引(bitmap)这类索引和上两类索引的实现逻辑不通 三:各类索引的应用场合当你的列中有很多重复的数据时适合建

PL/SQL学习笔记(三) ——PL/SQL代码编写规则

养成良好的代码编写习惯,PL/SQL代码编写规则: 1.标识符命名规则 1)定义变量时以v_作为前缀,如v_sal 2)定义常量时以c_作为前缀,如c_rate 3)定义游标时,建议使用_cursor作为后缀,如emp_cursor 4)定义异常时,以e_作为前缀,如e_integrity_error 5)定义PL/SQL表类型时,使用_table_type作为后缀,如sal_table_type. 6)定义表变量时,以_table作为后缀,如sal_table 7)同样,定义PL/SQL记录型

PL/SQL学习笔记-常用函数

此文章参考了网络上的一篇文章,并对原文做了补充和修改,并将不断补充和修改作者已佚,地址为:http://360doc.com/content/060307/10/2187_76452.html 一:字符函数 名称 功用 LOWER(xland) 将字符串表达式xland中的所有大写字母转换为小写字母 UPPER(xland) 将字符串表达式xland中的所有小写字母转换为大写字母 INITCAP(xland) xland字符串中首字母转换成大写     SUBSTR(xland,start,le