[转]oracle的ANYDATA数据类型
本文转自:http://blog.csdn.net/yuzhenhuan01/article/details/6606106
ANYDATA数据类型是个有点奇特的类型,你可以把不同数据类型的数据通过转换插入该类型的字段中,这个特性可以适应一些特殊的需求,不过插入和查询这个字段时稍有点繁琐。 由下语句看出ANYDATA是一个TYPE: SQL> SELECT object_name, object_type FROM dba_objects WHERE object_name like '%ANYDATA%' AND owner = 'SYS'; OBJECT_NAME OBJECT_TYPE
-------------------------------------------------------------------------------- -------------------
ANYDATA TYPE
ANYDATA TYPE BODY
ANYDATASET TYPE
ANYDATASET TYPE BODY
DBMS_ANYDATASET_LIB LIBRARY
DBMS_ANYDATA_LIB LIBRARY
STREAMS$_ANYDATA_ARRAY TYPE 7 rows selected 我们来看下这个TYPE可以使用的一些东西: SQL> DESC ANYDATA;
Element Type
------------------- ---------
CONVERTNUMBER FUNCTION
CONVERTDATE FUNCTION
CONVERTCHAR FUNCTION
CONVERTVARCHAR FUNCTION
CONVERTVARCHAR2 FUNCTION
CONVERTRAW FUNCTION
CONVERTBLOB FUNCTION
CONVERTCLOB FUNCTION
CONVERTBFILE FUNCTION
CONVERTOBJECT FUNCTION
CONVERTREF FUNCTION
CONVERTCOLLECTION FUNCTION
BEGINCREATE PROCEDURE
PIECEWISE PROCEDURE
SETNUMBER PROCEDURE
SETDATE PROCEDURE
SETCHAR PROCEDURE
SETVARCHAR PROCEDURE
SETVARCHAR2 PROCEDURE
SETRAW PROCEDURE
SETBLOB PROCEDURE
SETCLOB PROCEDURE
SETBFILE PROCEDURE
SETOBJECT PROCEDURE
SETREF PROCEDURE
SETCOLLECTION PROCEDURE
ENDCREATE PROCEDURE
GETTYPENAME FUNCTION
GETTYPE FUNCTION
GETNUMBER FUNCTION
GETDATE FUNCTION
GETCHAR FUNCTION
GETVARCHAR FUNCTION
GETVARCHAR2 FUNCTION
GETRAW FUNCTION
GETBLOB FUNCTION
GETCLOB FUNCTION
GETBFILE FUNCTION
GETOBJECT FUNCTION
GETREF FUNCTION
GETCOLLECTION FUNCTION
CONVERTTIMESTAMP FUNCTION
CONVERTTIMESTAMPTZ FUNCTION
CONVERTTIMESTAMPLTZ FUNCTION
CONVERTINTERVALYM FUNCTION
CONVERTINTERVALDS FUNCTION
CONVERTNCHAR FUNCTION
CONVERTNVARCHAR2 FUNCTION
CONVERTNCLOB FUNCTION
SETTIMESTAMP PROCEDURE
SETTIMESTAMPTZ PROCEDURE
SETTIMESTAMPLTZ PROCEDURE
SETINTERVALYM PROCEDURE
SETINTERVALDS PROCEDURE
SETNCHAR PROCEDURE
SETNVARCHAR2 PROCEDURE
SETNCLOB PROCEDURE
GETTIMESTAMP FUNCTION
GETTIMESTAMPTZ FUNCTION
GETTIMESTAMPLTZ FUNCTION
GETINTERVALYM FUNCTION
GETINTERVALDS FUNCTION
GETNCHAR FUNCTION
GETNVARCHAR2 FUNCTION
GETNCLOB FUNCTION
ACCESSNUMBER FUNCTION
ACCESSDATE FUNCTION
ACCESSCHAR FUNCTION
ACCESSVARCHAR FUNCTION
ACCESSVARCHAR2 FUNCTION
ACCESSRAW FUNCTION
ACCESSBLOB FUNCTION
ACCESSCLOB FUNCTION
ACCESSBFILE FUNCTION
ACCESSTIMESTAMP FUNCTION
ACCESSTIMESTAMPTZ FUNCTION
ACCESSTIMESTAMPLTZ FUNCTION
ACCESSINTERVALYM FUNCTION
ACCESSINTERVALDS FUNCTION
ACCESSNCHAR FUNCTION
ACCESSNVARCHAR2 FUNCTION
ACCESSNCLOB FUNCTION
CONVERTBFLOAT FUNCTION
CONVERTBDOUBLE FUNCTION
CONVERTUROWID FUNCTION
SETBFLOAT PROCEDURE
SETBDOUBLE PROCEDURE
GETBFLOAT FUNCTION
GETBDOUBLE FUNCTION
ACCESSBFLOAT FUNCTION
ACCESSBDOUBLE FUNCTION
ACCESSUROWID FUNCTION 大多从字面上都可以看出这些方法的功能 下面创建一个包含该类型的字段的测试表
SQL> CREATE TABLE yutest (v_cl1 sys.anyData); Table created desc一下:
SQL> desc yutest;
Name Type Nullable Default Comments
----- ----------- -------- ------- --------
V_CL1 SYS.ANYDATA Y 插入几条测试数据,注意这里使用的相应的方法函数插入:
SQL> INSERT INTO yutest VALUES (sys.anyData.convertNumber(5)); 1 row inserted SQL> INSERT INTO yutest VALUES (sys.anyData.convertDate(SYSDATE)); 1 row inserted SQL> INSERT INTO yutest VALUES (sys.anyData.convertVarchar2('test')); 1 row inserted SQL> commit; Commit complete 直接查询表中数据:
SQL> SELECT * FROM yutest a; V_CL1
-----
<Obje
<Obje
<Obje
查不出来具体的数据,看来必须转换下才能查看了。 这个是查看各个数据行的数据类型的: 这个是错的
SQL> SELECT v_cl1.gettypeName() FROM yutest; SELECT v_cl1.gettypeName() FROM yutest ORA-00904: "V_CL1"."GETTYPENAME": 标识符无效 这个也是错的
SQL> SELECT yutest.v_cl1.gettypeName() FROM yutest; SELECT yutest.v_cl1.gettypeName() FROM yutest ORA-00904: "YUTEST"."V_CL1"."GETTYPENAME": 标识符无效 这个才是正确的查询方法 SQL> SELECT a.v_cl1.gettypeName() FROM yutest a; A.V_CL1.GETTYPENAME()
--------------------------------------------------------------------------------
SYS.NUMBER
SYS.DATE
SYS.VARCHAR2 示例中涉及了3个数据类型,我这里也简单是写个转换函数,也只转换了3个类型 CREATE OR REPLACE FUNCTION getanydata(v_data IN sys.anyData)
RETURN VARCHAR2 IS
v_num NUMBER;
v_date DATE;
v_re_data VARCHAR2(4000);
BEGIN
CASE v_data.gettypeName
WHEN 'SYS.NUMBER' THEN
IF (v_data.getNumber(v_num) = dbms_types.success) THEN
v_re_data := v_num;
END IF;
WHEN 'SYS.DATE' THEN
IF (v_data.getDate(v_date) = dbms_types.success) THEN
v_re_data := v_date;
END IF;
WHEN 'SYS.VARCHAR2' THEN
IF (v_data.getVarchar2(v_re_data) = dbms_types.success) THEN
NULL;
END IF;
ELSE
v_re_data := 'not number or date or varchar2';
END CASE; RETURN v_re_data;
END getanydata; 使用新建的函数来查询 SQL> SELECT getanydata(v_cl1) FROM yutest a; GETANYDATA(V_CL1)
--------------------------------------------------------------------------------
5
14-7月 -11
test 数据有了
[转]oracle的ANYDATA数据类型的更多相关文章
- oracle中anyData数据类型的使用实例
---创建waterfallcreate or replace type waterfall is object(name varchar2(30),height number); --创建river ...
- Oracle存储过程-自定义数据类型,集合,遍历取值
摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...
- Oracle中的数据类型和数据类型之间的转换
Oracle中的数据类型 /* ORACLE 中的数据类型: char 长度固定 范围:1-2000 VARCHAR2 长度可变 范围:1-4000 LONG 长度可变 最大的范围2gb 长字符类型 ...
- Oracle数据库之数据类型
Oracle数据库之数据类型 Oracle基本数据类型(亦叫内置数据类型,internal datatypes或built-in datatypes)可以按类型分为:字符串类型.数字类型.日期类型.L ...
- 【转载】MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
[原文链接]:MyBatis JdbcType 与Oracle.MySql数据类型对应关系详解 1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 2. Mybatis ...
- MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
本文转自:http://blog.csdn.net/loongshawn/article/details/50496460 1. Mybatis JdbcType与Oracle.MySql数据类型对应 ...
- Mybatis JdbcType与Oracle、MySql数据类型对应列表
1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY JdbcType B ...
- Mybatis使用- Mybatis JdbcType与Oracle、MySql数据类型对应列表 ; Mybatis中javaType和jdbcType对应关系
Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY JdbcType BIG ...
- oracle的基本数据类型(转载)
数据类型是在设计表结构中需要定义的,选择适当的数据类型可以节省存储空间,提高运算效率. Oracle数据类型主要包括 1.字符型 适合保存字符串类型的数据,如姓名.地址.简介等等. 如:char(20 ...
随机推荐
- MFC定时器使用
MFC定时器实现方法 方法一:CWnd类提供的成员函数SetTimer实现定时器功能,只能在CWnd类或其派生类中调用. 方法二:Windows API函数SetTimer来实现. MFC定时器 启动 ...
- win10+vs2013+Qt5.4 安装方法
环境:win10 cn_visual_studio_ultimate_2013_x86_dvd_3009109 qt-opensource-windows-x86-msvc2013_64_opengl ...
- 命令rm
mv -r 递归删除文件夹内所有东西mv -i 交互式删除mv -f 强制删除,没有警告提示
- CDH CM安装及简单群集部署测试
前吃人的故事开始了,金钱是如何吃人的呢?我在想ing,还没想通,一起吧,哈哈: 入题,别胡扯,误人子弟!!!! CM@@!!!!!!....................., 先来张monitor ...
- cache 的简单认识与思考
之前对NOSQL的总结是:基本功能是key-value, 然后各自附加特殊功能. 现在简单的来认识一下cache. 背景 大家都知道NoSQL, 大多数都是 key-value 型的数据库.有些内存型 ...
- Android Studio 模拟器启动问题——黑屏 死机 解决方法
今天用了下Android Studio,出现了一些问题,现在将启动过程中遇到的问题和解决方案列出来,方便大家参考. 安装过程不多说,网上一搜一大把. 那直接说问题吧: 1. 无法启动,报错:Faile ...
- SQL2008-中不想插入从复记录
If not exists (SELECT ID FROM StuffAgitationYield where EMAgitation_ID=1 and YieldDateTime'2012-06-1 ...
- hdoj 2120 Ice_cream's world I【求成环数】
Ice_cream's world I Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- SQLServer2005数据导入Mysql到详细教程
如果转载请注明转载地址,谢谢. SQL SERVER数据导入MYSQL目录 1.Navicat for MySQL 版本10.0.9 2.创建目标数据库 3.创建正确的SQL SERVER数据库ODB ...
- SQL 索引
1.http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html 2 .聚簇索引和非聚簇索引的区别 3.聚集索引:只能有一个 (相当于字 ...