oracle 数据类型

发布网友 发布时间:2022-04-23 03:42

我来回答

2个回答

懂视网 时间:2022-04-30 03:39

= expression ;

* 声明同时为变量赋值

 variable variable_Type:= expression ;

3.变量计算

  • 空值加数字仍是空值:NULL + < 数字> = NULL
  • 空值加(连接)字符,结果为字符:NULL || <字符串> = < 字符串>
  • 布尔值只有TRUE, FALSE及 NULL 三个值
  • 数据库赋值是通过 SELECT语句来完成的,每次执行 SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应。如:
  •  DECLARE
     emp_id emp.empno%TYPE :=7788;
     emp_name emp.ename%TYPE;
     wages emp.sal%TYPE;
    BEGIN
     SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages
     FROM emp WHERE empno = emp_id;
     DBMS_OUTPUT.PUT_LINE(emp_name||‘----‘||to_char(wages));
    END;

      提示:不能将SELECT语句中的列赋值给布尔变量。

    4.数据类型的转换

    1. CHAR 转换为 NUMBER: TO_NUMBER(‘100.0‘)

    2.NUMBER 转换为CHAR: TO_CHAR(‘123.45‘)

    3. 字符转换为日期: v_date := TO_DATE(‘2001.07.03‘,‘yyyy.mm.dd‘);
    4.日期转换为字符 v_to_day := TO_CHAR(SYSDATE, ‘yyyy.mm.dd hh24:mi:ss‘) ;

     -- Created on 2015/6/12 by LYH 
    declare 
     str char(10):=‘100.0‘;
     i int:=421;
     total int;
    begin
     total:=TO_NUMBER(str)+i;
     Dbms_Output.put_line(TO_CHAR(total));
    
    end;

    5.变量作用范围及可见性

    在PL/SQL编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用范围所致。变量的作用域是指变量的有效作用范围,与其它高级语言类似,PL/SQL的变量作用范围特点是:

    1. 变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束。
    2. 一个变量(标识)只能在你所引用的块内是可见的。
    3. 当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)。
      1. 在子块中重新定义该变量后,它的作用仅在该块内。

    一个例子

    -- Created on 2015/6/15 by LYH 
    declare 
     Emess char(4):=‘李四‘;
    
    begin
     declare
     v1 number(10);
     begin
     SELECT fage
     INTO v1
     from t_employee
     where fname=‘Tom‘;
    
     Dbms_Output.put_line(v1);
     end;
    
     declare
     v1 number(10);
     begin
     SELECT fage
     INTO v1
     from t_employee
     where fname=‘Jerry‘;
    
     Dbms_Output.put_line(v1);
     end;
    
    end;

    oracle学习之路(五)-----oracle数据类型的一般操作

    标签:数据类型   oracle   

    热心网友 时间:2022-04-30 00:47

    按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW& RAW类型、ROWID & UROWID类型。

    在讲叙字符串类型前,先要讲一下编码。字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB)两种。数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同的二进制编码。这也是产生乱码的原因。数据库的编码格式一般是在创建数据库时指定的。当然也可以修改数据库的编码。

    一 字符串类型

    1.1:CHAR类型 CHAR(size [BYTE | CHAR])

    CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般来说默认是存储字节

    注意:数据库的NLS_CHARACTERSET 为AL32UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节。

    1.2: NCHAR类型

    这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。

    1.3 VARCHAR类型

    不要使用VARCHAR数据类型。使用VARCHAR2数据类型。

    1.4: VARCHAR2类型

    变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。

    1.5: NVARCHAR2类型

    这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。

    二. 数字类型

    2.1 NUMBER类型

    NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10130~10126(不包含此值),需要1~22字节(BYTE)不等的存储空间。

    P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字

    S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数

    下面是官方文档的示例

    Actual DataSpecified AsStored As
    123.NUMBER123.
    123.NUMBER(3)124
    123.NUMBER(6,2)123.
    123.NUMBER(6,1)123.9
    123.NUMBER(3)124
    123.NUMBER(4,2)exceeds precision
    123.NUMBER(6,-2)100
    .01234NUMBER(4,5).01234
    .00012NUMBER(4,5).00012
    .000127NUMBER(4,5).00013
    .0000012NUMBER(2,7).0000012
    .00000123NUMBER(2,7).0000012
    1.2e-4NUMBER(2,5)0.00012
    1.2e-5NUMBER(2,5)0.00001
    2.2 INTEGER类型

    INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。

    2.3 浮点数

    Oracle 数据库提供了专为浮点数的两种数值数据类型:

    BINARY_FLOAT

    BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。

    BINARY_DOUBLE

    BINARY_DOUBLE 是为 位,双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。

    在数字的列中,浮点数有小数精度。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮点数有二进制的精度。二进制浮点数支持的特殊值无穷大和 NaN (不是数字)。

    2.5 FLOAT类型

    FLOAT类型也是NUMBER的子类型。

    Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。若要从二进制转换为十进制的精度,请将 n 乘以 0.30103。要从十进制转换为二进制的精度,请用 3.32193 乘小数精度。126 位二进制精度的最大值是大约相当于 38 位小数精度。

    三. 日期类型

    日期类型用于存储日期数据,但是并不是使用一般的格式(2012-08-08)直接存储到数据库的。

    3.1 DATE类型

    DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。

    3.2 TIMESTAMP类型

    这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位

    3.3 TIMESTAMP WITH TIME ZONE类型

    这是TIMESTAMP类型的变种,它包含了时区偏移量的值

    3.4 TIMESTAMP WITH LOCAL TIME ZONE类型

    3.5 INTERVAL YEAR TO MOTH

    3.6 INTERVAL DAY TO SECOND

    四. LOB类型

    内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。BLOB、CLOB、NCLOB类型

    4.1 CLOB 数据类型

    它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符

    4.2 NCLOB 数据类型

    它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据。

    4.3 BLOB 数据类型

    它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据。

    4.4 BFILE 数据类型

    二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理

    五. RAW & LONG RAW类型

    5.1 LONG类型

    它存储变长字符串,最多达2G的字符数据(2GB是指2千兆字节, 而不是2千兆字符),与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换。ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的*要少得多。 LONG类型的*如下:

    1.一个表中只有一列可以为LONG型。(Why?有些不明白)

    2.LONG列不能定义为主键或唯一约束,

    3.不能建立索引

    4.LONG数据不能指定正则表达式。

    5.函数或存储过程不能接受LONG数据类型的参数。

    6.LONG列不能出现在WHERE子句或完整性约束(除了可能会出现NULL和NOT NULL约束)

    5.2 LONG RAW 类型,能存储2GB 的原始二进制数据(不用进行字符集转换的数据)

    5.3 RAW类型

    用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息

    六. ROWID & UROWID类型

    在数据库中的每一行都有一个地址。然而,一些表行的地址不是物理或永久的,或者不是ORACLE数据库生成的。

    例如,索引组织表行地址存储在索引的叶子,可以移动。

    例如,外部表的ROWID(如通过网关访问DB2表)不是​​标准的ORACLE的rowid。

    ORACLE使用通用的ROWID(UROWIDs)的存储地址的索引组织表和外表。索引组织表有逻辑urowids的,和国外表的外urowids。UROWID这两种类型的存储在ROWID伪(堆组织的表的物理行id)。

    创建基于逻辑的rowid在表中的主键。逻辑的rowid不会改变,只要主键不改变。索引组织表的ROWID伪UROWID数据类型。你可以访问这个伪列,你会堆组织表的ROWID伪(即使用一个SELECT …ROWID语句)。如果你想存储的rowid索引组织表,那么你就可以定义一列的表型UROWID到列检索值的ROWID伪。

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com