[转]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 ...
随机推荐
- android和ios的系统特性区别
1. 删除:android是长按,ios为滑动/或者进入编辑模式 2. android:应用内返回键,保证用户停留在应用程序中:硬件返回键可以让用户退出应用程序 3. 剪切/粘贴/选择等文本操作 ...
- adaboost学习资料收集
很通俗易懂的一篇博文 http://blog.csdn.net/haidao2009/article/details/7514787 百度搜索研发部的一篇文章 http://stblog.baidu- ...
- 高质量、处于持续更新的R包
本文在Creative Commons许可证下发布 自由软件的问题是开发人员没有稳定的资金来源支持,可能更新上做不到持续.经过考证和圈内朋友的帮助,现在把R包中高质量.持续更新的跟大数据事业相关的R包 ...
- 解决session失效之后登陆后重新返回之前的页面
在全局拦截器设置保存之前的url存入session中 登陆之后的地址再重session中存 request只用作一次请求 如果页面跳转几次的话原来的url就不存在了建议存在session @Overr ...
- bzoj 1432 [ZJOI2009]Function(找规律)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1432 [思路] 找(cha)规(ti)律(jie) 分析戳这儿 click here ...
- HDU-4704 Sum 大数幂取模
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4704 题意:求a^n%m的结果,其中n为大数. S(1)+S(2)+...+S(N)等于2^(n-1) ...
- AVLTree的节点删除
当年实现自己的共享内存模板的时候,map和set的没有实现,本来考虑用一个AVLTree作为底层实现的,为啥,因为我当时的数据结构知识里面我和RBTree不熟,只搞过AVLTree,但当时我一直没有看 ...
- Android uiautomator实例使用
转载自:http://blog.csdn.net/huiguixian/article/details/22398193 Android测试工具中,Monkey Runner只要简单几个指令即可,但他 ...
- 解决eclipse 使用run运行,始终会跳到debug模式!
查看此选项是否选择中卫always,若是,更改为never或prompt,重启eclipse即可
- Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
搭建环境: Windows-x64 10 Celery 3.1.23 Celery-with-redis 3.0 Redis-win32-win64 2.4.5 实现步骤: 1.安装 Redis ...