Oracle anydata数据类型

上一篇 / 下一篇  2008-07-10 00:28:07 / 个人分类:oracle管理

Oracle anydata数据类型:

SQL> CONN TEST/TEST
已连接。
SQL> DESC ANYDATA

METHOD
------
 STATIC FUNCTION CONVERTNUMBER RETURNS ANYDATA
参数名称                       类型                    输入/输出默认值?
------------------------------ ----------------------- ------ --------
 NUM                            NUMBER                  IN   

............

METHOD
------
 MEMBER FUNCTION ACCESSBDOUBLE RETURNS BINARY_DOUBLE

METHOD
------
 MEMBER FUNCTION ACCESSUROWID RETURNS ROWID


SQL> COL OBJECT_NAME FOR A30
SQL> SELECT object_name, object_type
  2  FROM dba_objects
  3  WHERE object_name like '%ANY%'
  4* AND wner = 'SYS';

OBJECT_NAME                    OBJECT_TYPE                                     
------------------------------ -------------------                             
/25dc84b4_SetDrawRectANY       JAVA CLASS                                      
/42700c8c_SetFillSpansANY      JAVA CLASS                                      
/69d73f42_SetDrawPolygonsANY   JAVA CLASS                                      
/acb51347_SetDrawLineANY       JAVA CLASS                                      
/c61bdc0a_SetFillRectANY       JAVA CLASS                                      
ANYDATA                        TYPE                                            
ANYDATA                        TYPE BODY                                       
ANYDATASET                     TYPE                                            
ANYDATASET                     TYPE BODY                                       
ANYTYPE                        TYPE                                            
ANYTYPE                        TYPE BODY                                       

OBJECT_NAME                    OBJECT_TYPE                                     
------------------------------ -------------------                             
DBMS_ANYDATASET_LIB            LIBRARY                                         
DBMS_ANYDATA_LIB               LIBRARY                                         
DBMS_ANYTYPE_LIB               LIBRARY                                         
STREAMS$_ANYDATA_ARRAY         TYPE                                            
SYS$RAWTOANY                   FUNCTION                                        

已选择16行。

SQL> CREATE TABLE t (mycol sys.anyData);
CREATE TABLE t (mycol sys.anyData)
             *
第 1 行出现错误:
ORA-00955: 名称已由现有对象使用

SQL> DROP TABLE T;

表已删除。

SQL> CREATE TABLE t (mycol sys.anyData);

表已创建。

SQL>
SQL> desc t
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 MYCOL                                              SYS.ANYDATA

SQL> INSERT INTO t VALUES (sys.anyData.convertNumber(5));

已创建 1 行。

SQL>
SQL> INSERT INTO t VALUES (sys.anyData.convertDate(SYSDATE));

已创建 1 行。

SQL>
SQL> INSERT INTO t VALUES (sys.anyData.convertVarchar2('hello world'));

已创建 1 行。

SQL>
SQL> COMMIT;

提交完成。

SQL> col typename format a20
SQL>
SQL> SELECT mytab.mycol.gettypeName() typeName
  2  FROM t mytab;

TYPENAME                                                                       
--------------------                                                           
SYS.NUMBER                                                                     
SYS.DATE                                                                       
SYS.VARCHAR2                                                                   

--不能直接显示anydata类型数据:

SQL> SELECT * FROM T;

MYCOL()                                                                        
--------------------------------------------
ANYDATA()                                                                      
ANYDATA()                                                                      
ANYDATA()                                                                      

SQL> col getdata format a20

--创建函数来显示:

SQL> CREATE OR REPLACE FUNCTION getData(p_x IN sys.anyData)
  2  RETURN VARCHAR2 IS
  3   l_num      NUMBER;
  4   l_date     DATE;
  5   l_varchar2 VARCHAR2(4000);
  6  BEGIN
  7    CASE p_x.gettypeName
  8    WHEN 'SYS.NUMBER' THEN
  9      IF (p_x.getNumber(l_num) = dbms_types.success) THEN
 10        l_varchar2 := l_num;
 11      END IF;
 12    WHEN 'SYS.DATE' THEN
 13      IF (p_x.getDate(l_date) = dbms_types.success) THEN
 14        l_varchar2 := l_date;
 15      END IF;
 16    WHEN 'SYS.VARCHAR2' THEN
 17      IF (p_x.getVarchar2(l_varchar2) = dbms_types.success) THEN
 18        NULL;
 19      END IF;
 20    ELSE
 21      l_varchar2 := '** unknown **';
 22    END CASE;
 23 
 24    RETURN l_varchar2;
 25  END getData;
 26  /

函数已创建。

SQL>
SQL> SELECT getData(mycol) GETDATA FROM t;

GETDATA                                                                        
--------------------                                                           
5                                                                              
10-7月 -08                                                                     
hello world                                                                    


 


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-06  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 11271
  • 日志数: 1530
  • 建立时间: 2008-04-17
  • 更新时间: 2008-10-06

RSS订阅

Open Toolbar