课程表

Oracle 基础教程

Oracle 进阶教程

Oracle PL/SQL

Oracle OEM

Oracle 备份和恢复

Oracle RAC

工具箱
速查手册

PL/SQL 数据类型

当前位置:免费教程 » 数据库/运维 » Oracle

PL/SQL数据类型不但支持Oracle SQL中的数据类型,还有自身自带的数据类型。学习任何一门语言,都需要了解一下该语言支持哪些数据类型,PL/SQL数据类型可以分为标量数据类型和引用数据类型两大部分。


一、标量数据类型

标量数据类型的变量只有一个值,且内部没有分量。标量数据类型包括数字型,字符型,日期型和布尔型。这些类型有的是 Oracle SQL 中有的数据类型,有的是 PL/SQL 自身附加的数据类型。下面我们来详细介绍一下常用的的标量数据类型:

1、数值类型:主要用来存储数值类型的数据。常用的有NUMBER、PLS_INTEGER、BINARY_INTEGER和SIMPLE_INTEGER类型。

NUMBER:可以存储小数和整数类型数据,格式为NUMBER(p,s),其中p表示的是精度(既是位数的长度),s表示的是小数点后的位数。例如:number(3,2)表示的范围-9.99—9.99。

PLS_INTEGER、BINARY_INTEGER、SIMPLE_INTEGER:主要用来存储整数类型,它们存储整数的范围都是-(2^31)...(2^31-1)。但是BINARY_INTEGER发生内存溢出的时候会给它分配一个number类型的数据,而PLS_INTEGER会直接抛异常报错,SIMPLE_INTEGER是PLS_INTEGER的一个子类型,它不允许存在NULL值数据。

2、字符类型:用来存储单个字符或字符串。主要有的类型有如下类型:

CHAR类型:固定长度的字符串,CHAR(n):默认长度是1,当字符串长度小于n时,会自动右补空格,所以在取数据的时候要注意补空格。

VARCHAR2类型:该类型存储可变长度的字符串VARCHAR2(n),最大存储的长度为4000个字节。当字符串长度小于n时,不会补齐空格。

LONG类型:该类型存储可变长度的字符串,不同于VARCAHR2类型,它对于字段的存储长度可达2G,但是作为PL/SQL变量,和VARCHAR2一样,只能存储最大32767字节。

3、时间类型:主要和SQL中的时间类型一致,有DATE和TIMESTAMP两种时间类型。

4、布尔类型:PL/SQL程序中的逻辑判断的值有:TRUE、FALSE、NULL值。


二、引用数据类型

引用数据类型是PL/SQL程序语言特有的数据类型,是用来引用数据库当中的某一行或者某个字段作为数据类型的声明。其中有两种引用类型:%TYPE和%ROWTYPE。

%TYPE类型:

引用数据库中表的某列的类型作为某变量的数据类型,也可以直接引用PL/SQL程序中某个变量作为新变量的数据类型。下面我们通过一个案例做下测试:

  1. declare
  2. ls_stuname stuinfo.stuname%type;--通过学生姓名字段声明ls_stuname
  3. begin
  4.   select t.stuname into ls_stuname
  5.     from student.stuinfo t
  6.    where t.stuid = 'SC201801006';   
  7.   dbms_output.put_line(ls_stuname);
  8. exception
  9.   when no_data_found  then
  10.      dbms_output.put_line('该学生在学生信息表中找不到');
  11. end;

结果如下:

1.jpg

% ROWTYPE 类型:

%ROWTYPE类型是PL/SQL程序引用数据库表中的一行作为数据类型,即 RECORD 类型(记录类型)表示一条数据记录。类似java程序当中的对象的实例。可以使用“.”来访问记录中的属性。下面我们通过实例来做下测试:

  1. declare
  2. ls_stuinfo stuinfo%rowtype;
  3. xsjbxx varchar2(50);
  4. begin
  5.   select t.* into ls_stuinfo
  6.     from stuinfo t
  7.    where t.stuid='SC201801006';
  8.    xsjbxx:='姓名:' ||ls_stuinfo.stuname || ' 学号:' ||ls_stuinfo.stuid || ' 年龄:' ||ls_stuinfo.age;
  9.   dbms_output.put_line(xsjbxx);
  10. exception
  11.   when no_data_found  then
  12.      dbms_output.put_line('该学生在学生信息表中找不到');
  13. end;

案例中我们通过查询学生信息表(stuinfo)中学号“SC201801006”的数据记录赋值给ls_stuinfo(%rowtype)变量,结果如下:

2.jpg

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号