[转]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 ...
随机推荐
- 树莓pi快速ssh【校园网】
校园网是NAT后的,没有显示器,我把路由器的DHCP服务关了,这样的情况下怎么ssh到树莓pi? 把树莓pi 连到路由器上(已经关闭DHCP),手机安装FING https://play.google ...
- PHP基本语法的小结
一.PHP能做什么? PHP能做什么?我觉得它很强大,只要我能想到的,它都能做,只是我技术能力还不行╮(╯﹏╰)╭.好吧,一张图,基本了解一下吧(ps:PHP的功能不局限于此( ^_^ )) 图像有点 ...
- HW7.10
public class Solution { public static void main(String[] args) { int[][] array = new int[3][3]; for( ...
- nodejs学习:sails框架的学习
上周通过搭建CMS系统接触到了sails框架,知道一些ORM的概念.这周开始深入后台数据交互,发现twenty框架的数据结构在sails上又设计了一番(比如node.category),不得不说师哥就 ...
- work2
回答问题: 描述在这么多相似的需求面前, 你怎么维护你的设计 (父类/子类/基类, UML, 设计模式, 或者其它方法) 让整个程序的架构不至于崩溃的? 答:诚然,问题给出了很多选项如-a,-v,- ...
- hdoj 1405 The Last Practice
The Last Practice Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- java IO选择流的原则及其与IO流相关类的关系
1 按照用途进行分类 1.1 按照数据的来源(去向)分类 是文件:FileInputStream, FileOutputStream, FileReader, FileWriter 是byte[]:B ...
- Android 命名规范和编码规范
简明概要 多写注释 一.关于命名规范 对于开发项目来说肯定是要有统一的规范,然而命名规范需要做到哪几点呢? 答: 首先,不能反人类. 再来就是,要望文而知其意. 下面就来说说具体该怎么去规范我们的代 ...
- 【Stage3D学习笔记续】山寨Starling(六):动画实现和测试
我发布了一个版本v0.2,该版本是未优化版本,且没有添加Touch事件体系,但是由于是最基础且未优化的,所以可以通过参考代码快速的了解实现原理. 接下来的一段笔记开始进行渲染优化,我会把所有的目光都集 ...
- 前端 - 使用gulp搭建es6运行环境
1.创建一个项目目录2.全局安装Traceur,在控制台输入 npm install -g traceur3.打开项目目录,安装gulp以及gulp-traceur插件 npm install -g ...