[转]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 ...
随机推荐
- MSP430看门狗
其实430的看门狗,与51的大同小异,都是为了防止程序跑飞而出现不可预知的错误而专门设定的,所以说,看门狗的应用,是项目马上要进行实际应用中必须要进行的一环,也是电子工程师必须掌握的一环,下面介绍一下 ...
- js,css压缩工具
常见的js压缩工具: js commpress: 运行平台:windows系统, 优点:能自动压缩: 缺点:不能拖动文件压缩:只支持windows平台: s.press 运行平台:mac ox系统 优 ...
- 设计原则 Design Principle
Design Principle设计原则 最近由于碰到要参与设计一个音频处理系统,有人提议用一个大的全局变量结构体来做状态信息交流的地方,引起了我对设计一个系统的思考,于是找到了如下资料,当然,关于这 ...
- oracle 时间函数
加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1) from ...
- 基于samba实现win7与linux之间共享文件_阳仔_新浪博客
基于samba实现win7与linux之间共享文件_阳仔_新浪博客 然后启动samba执行如下指令: /dev/init.d/smb start 至此完成全部配置.
- php获取post中的json数据的实现方法
最近用到腾讯微博与PHP交互,腾讯把json数据post给PHP(腾讯推送数据时,每条数据是一个json格式的数据包,作为post的数据体(请注意post数据体没有参数,不是key=value形式,整 ...
- .NET设计模式(5):工厂方法模式(Factory Method)
):工厂方法模式(Factory Method) 工厂方法模式(Factory Method) --.NET设计模式系列之五 Terrylee,2004年1月2日 转载:http://terry ...
- 【Stage3D学习笔记续】真正的3D世界(五):粒子特效
先看效果,按下空格键添加粒子特效: 一般而言粒子特效的实现都是比较复杂的,且不说实现粒子特效的编码和设计,光是编写一个粒子编辑器就不是简单的一件事,但是作者使用了很取巧的方式来完成,我们接下来深入代码 ...
- PHP+MySQL开发技术详解—学习笔记
1. PHP is Hypertext Preproocessor. 2. Hello World: <?php Echo ‘Hello World!’; ?> 3. ...
- 把SVN添加到windows服务
sc create SVN_Service binpath= "D:\DevTools\Subversion\bin\svnserve.exe --service --root D:\Dev ...