• 1. 8.3.1 Oracle的数据类型 8.3.2 Oracle常量、变量和表达式 8.3.3 Oracle内置函数 8.3.4 Oracle的哑表与伪列8.3 Oracle数据库基础
  • 2. 1.字符型 用来存储字符串或字符数据,主要类型有VARCHAR2、CHAR和LONG。 (1)VARCHAR2 用来存储可变长的字符串或字符型数据,在使用时,须指明其最大字节数据。 (2)CHAR 用来存储定长的字符串或字符型数据,使用时也要指定长度,其缺省值为1。 (3)LONG 用来存储可变长的字符串或字符型数据。8.3.1 Oracle的数据类型
  • 3. 2.数字型 数字型用于存储整数或实数。主要有:number、BINARY_INTEGER (1)NUMER 用于存储数字数据,包括整数或浮点数。在实际应用中,应指定该类型数据长度和小数的位数。在Oracle中其指定的长度不包含小数点和符号位。 (2)BINARY_INTEGER 它是PL/SQL的一个数据类型,它用于带符号的整数值,以2的补码的二进制形式进行存储。8.3.1 Oracle的数据类型
  • 4. 3.日期型 DATE型用于存储日期和时间信息,包括世纪、和、月、日、时、分、秒,其占7个字节,每一部分占一个字节。 4.RAW和LONG RAW RAW和LONG RAW用来存储二进制数据。 (1)RAW RAW类似于CHAR,必须指定存储二进制数的最大字节数。 (2)LONG RAW LONG RAW类似于LONG。8.3.1 Oracle的数据类型
  • 5. 5.ROWID 数据库表中的每一行(ROW)都有一个地址,通过查询伪列ROWID获得该行地址。该伪列的值为16进制字符串,该串的数据类型为ROWID。其字符值的形式为:BLOCK.ROW.FILE。 6. 布尔型 在表中无布尔型的字段类型,只有在PL/SQL中可以定义BOOLEAN型,它的值为TRUE、FALSE、NULL。在定义BOOLEAN型变量时可限定变量为NOT NULL,但此时必须为该变量初始化。8.3.1 Oracle的数据类型
  • 6. 7.复合类型 (1)记录 记录定义的格式如下: TYPE Record_type IS RECORD( Field1 Datatype1 [NOT NULL][:=Expression1], Field2 Datatype2 [NOT NULL][:=Expression2], …); 在上述格式中Record_type是一种定义的记录类型。 如果要定义记录类型的变量与已建立的某一关系表结构一致,可使用下列定义: Record_typename table_name%ROWTYPE; 8.3.1 Oracle的数据类型
  • 7. (2) 表 PL/SQL中的表类似于C语言中的数组,并与其数组的处理方式类似,但实现方法不同。表必须定义该表类型,再声明一个属于该类型的变量,然后才能引用。定义表类型的格式如下: TYPE Table_type IS TABLE OF type INDEX BY BINARY_INTEGER; 一个PL/SQL表类似于数据库中的一个只有两列的表,一列的类型为BINARY_INTEGER,另一列的类型为定义中指定的类型。8.3.1 Oracle的数据类型
  • 8. 8.LOB类型 LOB类型用来存储大型的对象,它可以是一个二进制数值或字符型值,其最大长度为4GB。LOB可包含没有结构特征的数据,对它的访问比对LONG 或LONG RAW数据的访问更为有效,对它的限制更少。 9.自定义子类型 PL/SQL中除可使用预定义的子类型外,用户自己可以定义子类型,其格式为: SUBTYPE new_type IS original_type ;8.3.1 Oracle的数据类型
  • 9. 10.使用%TYPE 在许多情况下,PL/SQL变量可以用来处理存储在数据库表中的数据,因而该变量类型与表中相应字段的数据类型相同。可使用%TYPE说明某一变量与表中字段类型相同。其格式为: variety_name table_name.field_name%TYPE; 8.3.1 Oracle的数据类型
  • 10. 在Oracle中把值存储在常量和变量中,常量的值不能改变,变量的值可以改变。变量可分为字段变量和内存变量。用到的常量与变量必须定义,在定义时须指明它的数据类型。 Oracle中的表达式与在第 4章中介绍了SQL中的表达式相同,在此不重述。但在Oracle使用表达式时应注意NULL与其它数据的运算。NULL与任何类型数据作运算其结果均为NULL。 8.3.2 Oracle常量、变量和表达式
  • 11. 但NULL 具有以下特点: (1) 等价于没有任何值; (2) 与 0、空字符串或空格不同; (3) 在WHERE条件中, Oracle认为结果为NULL的条件为FALSE,带有这样条件的SELECT语句不返回行,并且不返回错误信息,但NULL和FALSE是不同的; (4)排序时比其他数据都大; (5)空值不能被索引。虽然在某列上建立了索引,但是对该列的空值查询来说,因为空值没有被索引,所以不能改善查询的效率。8.3.2 Oracle常量、变量和表达式
  • 12. Oracle中提供了丰富的函数,除少数几个与SQL函数不同外,其余均相同。 1.LENGTH与LENGTHB 上述两个函数都是求出字符串的长度,但返回结果可能不一样。LENGTHB返回的长度单位为字节,而不是字符。LENGTH则返回的值为字符串中字符的个数。 2.SUBSTR与SUBSTRB SUBSTR函数据是从目标字符串中某个字符开始取出指定字符个数的子串,而SUBSTRB函数据是从目标字符串中某个字节开始取出指定字节个数的子串。8.3.3 Oracle内置函数
  • 13. 3.INSTR与INSTRB INSTR与INSTRB均是从指定字符串中的指定位置开始查找出现指定次数的字符串,它们的区别与SUBSTR与SUBSTRB区别相同。 4.TO_DATE TO_DATE将一个字符串转换成一个日期型数据。其格式为: TO_DATE(string,[‘format’]) 其中第一个参数是要转换的字符串,第二个参数为指定转换的格式,若未指定格式,则使用系统的缺省格式。 8.3.3 Oracle内置函数
  • 14. 5.NVL 判断某一变量是否为空时可使用IS NULL 或IS NOT NULL,但它不能用于函数。Oracle提供了函数NVL,其语法为: NVL(Expression1, Expression2) 6.DECODE 该函数类似于一系统嵌套函数,其语法为: DECODE(Base_expression , Compare_expression1,Value1, Compare_expression2,Value2,……, Compare_expressionn,Valuen,DEFAULT) 8.3.3 Oracle内置函数
  • 15. 7.UID UID函数没有参数,它返回唯一标识当前数据库用户的整数。 8.USER 该函数没有参数,它返回当前Oracle用户的名字。 9.分组函数 分组函数忽略空值。在实际应用中,根据需要可利用NVL函数用零代替空值。 8.3.3 Oracle内置函数
  • 16. 1.哑表(DUAL) Oracle中经常要使用常量或伪列来说明函数的某些功能,或使用其它开发工具调用Oracle与表无关的一些函数、过程等时,如调用Oracle的系统日期函数SYSDATE,SELECT语句并不关心那一行在表中,只要一条记录就足够了。为此,Oracle提供了DUAL表。该表只包含一个字段和一条记录。使用它容易解决与表无关的一些查询问题。8.3.4 Oracle的哑表与伪列
  • 17. 2.伪列(Pseudo_column) 一个伪列是在查询时产生一个值的“列”,它的处理方式与表中一个字段的处理方式类似,但它不是表中的一个真正字段。Oracle中目前使用下列伪列: (1)SYSDATE SYSDATE是一个内置函数,它返回Oracle系统的日期与时间。在开实际系统发时,应使用该函数,而不应使用开发工具提供的函数,调用用户端机器上的日期与时间。 (2)UID与USER 这是在本章前面介绍过的两个函数。 (3)NULL 表示空值。应注意它与其它数据的运算及对一些函数值的影响。具体请参阅本章前面的讨论。8.3.4 Oracle的哑表与伪列
  • 18. (4)CURRVAL与NEXTVAL 这两个伪列与序号一起使用,表示返回序号的当前值和下一个值。具体使用方法参见第5节。 (5)LEVEL 该伪列主要用于对表执行层次树遍历的SELECT语句中,它返回树的当前层次。 (6)ROWID 该伪列用于在查询的选择列表中,它返回特定记录的行标识符,其返回值为一个ROWID类型的数值。 (7)ROWNUM 该伪列返回查询中的当前行序号,主要用于限制要处理的记录总数。它常用于SELECT中的WHERE子句和UPDATE语句的SET子句中。8.3.4 Oracle的哑表与伪列