Oracle Raw,number,varchar2...转换

本文详细介绍了 Oracle 数据库中的 RAW 数据类型,包括其定义、使用限制及与其他数据类型的转换方法。通过实例展示了如何创建包含 RAW 类型的表,并进行插入、查询等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle Raw,number,varchar2...转换

  在网络中的计算机之间传输 RAW 数据时,或者使用 Oracle 实用程序将 RAW 数据从一个数据库移到另一个数据库时,Oracle 服务器不执行字符集转换。存储实际列值所需要的字节数大小随每行大小而异,最多为 2,000 字节。
可能这样的数据类型在数据库效率上会提高,而且对数据由于字符集的不同而导致的不一致的可能性在这边也排除了。
这个字段在实际的用途中好像不多。
raw类型的介绍,在此引用了一下网友的blog:
RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。
LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节

==============================================================
SQL> create table datatype_test_raw(paddr raw(8));
 
Table created
 
SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'));
 
insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'))
 
ORA-01401: inserted value too large for column
 
SQL> alter table datatype_test_raw modify paddr raw(20);
 
Table altered
 
SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'));
 
insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'))
 
ORA-01401: inserted value too large for column
 
SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw test!'));
 
1 row inserted
 
SQL> commit;
 
Commit complete
 
SQL> select * from datatype_test_raw;
 
PADDR
----------------------------------------
54686973206973206120726177207465737421
 
SQL> select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;
 
UTL_RAW.CAST_TO_VARCHAR2(PADDR
--------------------------------------------------------------------------------
This is a raw test!
 
SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('中文测试'));
 
1 row inserted
 
SQL> commit;
 
Commit complete
 
SQL> select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;
 
UTL_RAW.CAST_TO_VARCHAR2(PADDR
--------------------------------------------------------------------------------
This is a raw test!

 


中文测试:
 
SQL> select paddr, utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;
 
PADDR                           UTL_RAW.CAST_TO_VARCHAR2(PADDR
---------------------- --------------------------------------------------------------------------------
54686973206973206120726177207465737421 This is a raw test!
D6D0CEC4B2E2CAD4 中文测试
 
这里用到了两个函数:
utl_raw.cast_to_raw([varchar2]);--将varchar2转换为raw类型
utl_raw.cast_to_varchar2([raw]);--将raw转换为varchar2类型
这里varchar2的字符集一般是GB2312。

另外:
utl_raw包的几个其他的函数用法:
utl_raw.cast_from_number([number]);
utl_raw.cast_to_number([number]);
位操作:
utl_raw.bit_or();
utl_raw.bit_and();
utl_raw.bit_xor();

另外还有转换函数:
hextoraw(); --将对应16进制数转换为raw

 

当使用HEXTORAW时,会把字符串中数据当作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中

### Oracle 数据库标量数据类型 #### 定义 在 Oracle 数据库中,标量(SCALAR)数据类型表示单个值而不是一组或多组值。这些类型用于定义表列以及 PL/SQL 变量、常量和参数。合法的标量类型不仅限于数据库列所使用的标准 SQL 类型,还包括一些特定于 Oracle 的扩展[^1]。 常见的标量数据类型有: - **NUMBER(p,s)**:存储固定或浮点数。 - **VARCHAR2(size)** 和 **CHAR(size)**:分别用于可变长度字符串和定长字符数据。 - **DATE**:日期时间戳信息。 - **RAW(size)** 和 **LONG RAW**:原始字节数据。 - **BLOB**, **CLOB**, **NCLOB**: 大对象 (Large Object),其中 BLOB 表示二进制大对象而 CLOB 则指字符大对象。 - **BOOLEAN** (仅限 PL/SQL): 布尔逻辑值 true 或 false[^3]。 #### 使用方法 ##### 创建表格时使用标量类型 当创建新表时,可以通过指定相应的标量类型来设置每一列的数据格式。例如: ```sql CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(50), hire_date DATE, salary NUMBER(8, 2) ); ``` 上述语句定义了一个名为 `employees` 的表,其中包括四个字段——员工编号 (`id`) 是一个数字;姓名 (`name`) 是最多包含 50 个字符的字符串;入职日期 (`hire_date`) 存储为日期;薪水 (`salary`) 被设定成具有两位小数精度的数值。 ##### 在 PL/SQL 中声明变量 除了应用于表结构外,在编写 PL/SQL 程序单元如过程、函数或触发器期间也可以利用这些基本数据类型来进行局部变量声明: ```plsql DECLARE v_employee_id EMPLOYEES.ID%TYPE; -- 绑定到现有表列类型 v_first_name VARCHAR2(30); -- 明确给出大小限制 BEGIN SELECT e.id INTO v_employee_id FROM employees e WHERE rownum = 1; END; / ``` 这段代码展示了如何基于已存在的表列类型 `%TYPE` 来声明一个新的同名但不同作用域内的变量 `v_employee_id`, 同时也直接设定了另一个字符串类型的本地变量 `v_first_name`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值