本文转自: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数据类型的更多相关文章

  1. oracle中anyData数据类型的使用实例

    ---创建waterfallcreate or replace type waterfall is object(name varchar2(30),height number); --创建river ...

  2. Oracle存储过程-自定义数据类型,集合,遍历取值

    摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...

  3. Oracle中的数据类型和数据类型之间的转换

    Oracle中的数据类型 /* ORACLE 中的数据类型: char 长度固定 范围:1-2000 VARCHAR2 长度可变 范围:1-4000 LONG 长度可变 最大的范围2gb 长字符类型 ...

  4. Oracle数据库之数据类型

    Oracle数据库之数据类型 Oracle基本数据类型(亦叫内置数据类型,internal datatypes或built-in datatypes)可以按类型分为:字符串类型.数字类型.日期类型.L ...

  5. 【转载】MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解

    [原文链接]:MyBatis JdbcType 与Oracle.MySql数据类型对应关系详解 1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 2. Mybatis ...

  6. MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解

    本文转自:http://blog.csdn.net/loongshawn/article/details/50496460 1. Mybatis JdbcType与Oracle.MySql数据类型对应 ...

  7. Mybatis JdbcType与Oracle、MySql数据类型对应列表

    1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY     JdbcType B ...

  8. Mybatis使用- Mybatis JdbcType与Oracle、MySql数据类型对应列表 ; Mybatis中javaType和jdbcType对应关系

    Mybatis JdbcType与Oracle.MySql数据类型对应列表  Mybatis JdbcType Oracle MySql JdbcType ARRAY     JdbcType BIG ...

  9. oracle的基本数据类型(转载)

    数据类型是在设计表结构中需要定义的,选择适当的数据类型可以节省存储空间,提高运算效率. Oracle数据类型主要包括 1.字符型 适合保存字符串类型的数据,如姓名.地址.简介等等. 如:char(20 ...

随机推荐

  1. NOIP2005 篝火晚会

    篝火晚会 (fire.pas/c/cpp) [问题描述] 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”.在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会. ...

  2. 50道经典的JAVA编程题(26-30)

    50道经典的JAVA编程题(26-30),这么晚了,早点睡了要,明早8点考java祝我好运吧!!!晚安~ [程序26]Ex26.java(跳过了,好没意思的题啊)题目:请输入星期几的第一个字母来判断一 ...

  3. ./wls1036_linux32.bin: /lib/ld-linux.so.2: bad ELF interpreter

    [CentOS]安装软件:/lib/ld-linux.so.2: bad ELF interpreter解决   环境: [orangle@localhost Downloads]$ uname -m ...

  4. linux C编程之makefile

    目的:       基本掌握了 make 的用法,能在Linux系统上编程.环境:       Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备:      ...

  5. HDU 4497 GCD and LCM (数论)

    题意:三个数x, y, z. 给出最大公倍数g和最小公约数l.求满足条件的x,y,z有多少组. 题解:设n=g/l n=p1^n1*p2^n2...pn^nk (分解质因数 那么x = p1^x1 * ...

  6. Visual Studio 2012 应用软件开发新方式

    微软正式发布Visual Studio 2012 应用软件开发新方式 2012-09-13 09:54 51CTO.com 我要评论(0) 字号:T | T “现在,开发者将有更好的机会开发与云服务连 ...

  7. 【转】移动前端手机输入法自带emoji表情字符处理

    http://blog.csdn.net/binjly/article/details/47321043 今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入 ...

  8. 使用Knoctout.分页

    要点:点击标签翻页部分时,pageValue自动加1. 1.api中的方法 public ArticleListModel Get(int page,string _class) { var list ...

  9. 【转】linux下cppunit的安装

    以下内容来自:http://www.51testing.com/html/51/279751-170160.html 1. 安装 cppunit的下载地址为:http://sourceforge.ne ...

  10. javasctipt显示几分钟前、几天前等

    jsp页面: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...