PL/SQL - 数据类型

  • 简述

    在本章中,我们将讨论 PL/SQL 中的数据类型。PL/SQL 变量、常量和参数必须具有有效的数据类型,它指定了存储格式、约束和有效的值范围。我们将专注于SCALARLOB本章中的数据类型。其他两种数据类型将在其他章节中介绍。
    序号 类别和描述
    1
    Scalar
    没有内部组件的单个值,例如 NUMBER, DATE, 要么 BOOLEAN.
    2
    Large Object (LOB)
    指向与其他数据项分开存储的大对象的指针,例如文本、图形图像、视频剪辑和声音波形。
    3
    Composite
    具有可单独访问的内部组件的数据项。例如,集合和记录。
    4
    Reference
    指向其他数据项的指针。
  • PL/SQL 标量数据类型和子类型

    PL/SQL 标量数据类型和子类型属于以下类别 -
    序号 日期类型和描述
    1
    Numeric
    对其执行算术运算的数值。
    2
    Character
    表示单个字符或字符串的字母数字值。
    3
    Boolean
    对其执行逻辑运算的逻辑值。
    4
    Datetime
    日期和时间。
    PL/SQL 提供了数据类型的子类型。例如,数据类型 NUMBER 有一个称为 INTEGER 的子类型。您可以在 PL/SQL 程序中使用子类型使数据类型与其他程序中的数据类型兼容,同时将 PL/SQL 代码嵌入另一个程序(如 Java 程序)中。
  • PL/SQL 数字数据类型和子类型

    下表列出了 PL/SQL 预定义的数字数据类型及其子类型 -
    序号 数据类型和描述
    1
    PLS_INTEGER
    -2,147,483,648 到 2,147,483,647 范围内的有符号整数,以 32 位表示
    2
    BINARY_INTEGER
    -2,147,483,648 到 2,147,483,647 范围内的有符号整数,以 32 位表示
    3
    BINARY_FLOAT
    单精度 IEEE 754 格式浮点数
    4
    BINARY_DOUBLE
    双精度 IEEE 754 格式浮点数
    5
    NUMBER(prec, scale)
    绝对值在 1E-130 到(但不包括)1.0E126 范围内的定点或浮点数。NUMBER 变量也可以表示 0
    6
    DEC(prec, scale)
    ANSI 特定定点类型,最大精度为 38 位十进制数字
    7
    DECIMAL(prec, scale)
    IBM 特定定点类型,最大精度为 38 位十进制数字
    8
    NUMERIC(pre, secale)
    浮点型,最大精度为 38 位十进制数字
    9
    DOUBLE PRECISION
    ANSI 特定的浮点类型,最大精度为 126 位二进制数字(大约 38 位十进制数字)
    10
    FLOAT
    ANSI 和 IBM 特定的浮点类型,最大精度为 126 位二进制数字(大约 38 位十进制数字)
    11
    INT
    ANSI 特定整数类型,最大精度为 38 位十进制数字
    12
    INTEGER
    ANSI 和 IBM 特定的整数类型,最大精度为 38 位十进制数字
    13
    SMALLINT
    ANSI 和 IBM 特定的整数类型,最大精度为 38 位十进制数字
    14
    REAL
    浮点型,最大精度为 63 位二进制数字(约 18 位十进制数字)
    以下是一个有效的声明 -
    
    DECLARE 
       num1 INTEGER; 
       num2 REAL; 
       num3 DOUBLE PRECISION; 
    BEGIN 
       null; 
    END; 
    / 
    
    当上面的代码被编译和执行时,它会产生以下结果 -
    
    PL/SQL procedure successfully completed 
    
  • PL/SQL 字符数据类型和子类型

    以下是 PL/SQL 预定义字符数据类型及其子类型的详细信息 -
    序号 数据类型和描述
    1
    CHAR
    最大长度为 32,767 字节的定长字符串
    2
    VARCHAR2
    最大长度为 32,767 字节的变长字符串
    3
    RAW
    最大长度为 32,767 字节的可变长度二进制或字节字符串,不被 PL/SQL 解释
    4
    NCHAR
    最大长度为 32,767 字节的定长国家字符串
    5
    NVARCHAR2
    最大长度为 32,767 字节的可变长度国家字符串
    6
    LONG
    最大长度为 32,760 字节的变长字符串
    7
    LONG RAW
    最大长度为 32,760 字节的可变长度二进制或字节字符串,不被 PL/SQL 解释
    8
    ROWID
    物理行标识符,普通表中某行的地址
    9
    UROWID
    通用行标识符(物理、逻辑或外部行标识符)
  • PL/SQL 布尔数据类型

    BOOLEAN数据类型存储用于逻辑运算的逻辑值。逻辑值是布尔值TRUEFALSE 和价值 NULL.
    但是,SQL 没有与 BOOLEAN 等效的数据类型。因此,布尔值不能用于 -
    • SQL语句
    • 内置 SQL 函数(例如 TO_CHAR)
    • 从 SQL 语句调用的 PL/SQL 函数
  • PL/SQL 日期时间和间隔类型

    DATE数据类型用于存储固定长度的日期时间,其中包括自午夜以来以秒为单位的时间。有效日期范围从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日。
    默认日期格式由 Oracle 初始化参数 NLS_DATE_FORMAT 设置。例如,默认值可能是“DD-MON-YY”,它包括一个两位数的月份日期、月份名称的缩写和年份的最后两位数字。例如,01-OCT-12。
    每个 DATE 包括世纪、年、月、日、小时、分钟和秒。下表显示了每个字段的有效值 -
    字段名称 有效的日期时间值 有效间隔值
    YEAR -4712 到 9999(不包括第 0 年) 任何非零整数
    MONTH 01 至 12 0 到 11
    DAY 01 到 31(受 MONTH 和 YEAR 的值限制,根据区域设置的日历规则) 任何非零整数
    HOUR 00 到 23 0 到 23
    MINUTE 00 至 59 0 到 59
    SECOND 00 到 59.9(n),其中 9(n) 是时间小数秒的精度 0 到 59.9(n),其中 9(n) 是间隔小数秒的精度
    TIMEZONE_HOUR -12 到 14(范围适应夏令时的变化) 不适用
    TIMEZONE_MINUTE 00 至 59 不适用
    TIMEZONE_REGION 在动态性能视图 V$TIMEZONE_NAMES 中找到 不适用
    TIMEZONE_ABBR 在动态性能视图 V$TIMEZONE_NAMES 中找到 不适用
  • PL/SQL 大对象 (LOB) 数据类型

    大对象 (LOB) 数据类型是指大数据项,例如文本、图形图像、视频剪辑和声音波形。LOB 数据类型允许对这些数据进行高效、随机、分段访问。以下是预定义的 PL/SQL LOB 数据类型 -
    数据类型 描述 尺寸
    BFILE 用于在数据库外的操作系统文件中存储大型二进制对象。 系统相关。不能超过 4 GB。
    BLOB 用于在数据库中存储大型二进制对象。 8 到 128 太字节 (TB)
    CLOB 用于在数据库中存储大块字符数据。 8 到 128 TB
    NCLOB 用于在数据库中存储大块的 NCHAR 数据。 8 到 128 TB
  • PL/SQL 用户定义的子类型

    子类型是另一种数据类型的子集,称为其基类型。子类型具有与其基类型相同的有效操作,但只有其有效值的一个子集。
    PL/SQL 在包中预定义了几个子类型 STANDARD. 例如,PL/SQL 预定义了子类型CHARACTERINTEGER 如下 -
    
    SUBTYPE CHARACTER IS CHAR; 
    SUBTYPE INTEGER IS NUMBER(38,0);
    
    您可以定义和使用自己的子类型。以下程序说明了定义和使用用户定义的子类型 -
    
    DECLARE 
       SUBTYPE name IS char(20); 
       SUBTYPE message IS varchar2(100); 
       salutation name; 
       greetings message; 
    BEGIN 
       salutation := 'Reader '; 
       greetings := 'Welcome to the World of PL/SQL'; 
       dbms_output.put_line('Hello ' || salutation || greetings); 
    END; 
    / 
    
    在 SQL 提示符下执行上述代码时,会产生以下结果 -
    
    Hello Reader Welcome to the World of PL/SQL 
     
    PL/SQL procedure successfully completed. 
    
  • PL/SQL 中的 NULL

    PL/SQL NULL 值表示 missing 要么 unknown data它们不是整数、字符或任何其他特定数据类型。注意NULL 与空数据字符串或空字符值不同 '\0'. 可以分配空值,但它不能等同于任何东西,包括它自己。