ORACLE物件型別表

zhouwf0726發表於2019-04-16
ORACLE物件型別表

TYPE對於有OOP概念的人來說比較容易理解的。OBJECT就是ORACLE中的物件型別。

SQL> CREATE TYPE T_NAME AS OBJECT(
2 COL1 NUMBER,
3 COL2 VARCHAR2(60)
4 );
5 /

Type created

物件型別表有兩個使用方法:
1、只有一個物件型別欄位的表.

SQL> CREATE TABLE TEST1 OF T_NAME;

Table created

SQL> DESC TEST1;
Name Type Nullable Default Comments
---- ------------ -------- ------- --------
COL1 NUMBER Y
COL2 VARCHAR2(60) Y

SQL> INSERT INTO TEST1 VALUES(1,'1');

1 row inserted

SQL> SELECT * FROM TEST1;

COL1 COL2
---------- ------------------------------------------------------------
1 1

--USER_TABLES檢視查詢不到TEST1
SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='TEST1';

TABLE_NAME
------------------------------

--USER_USER_TAB_COLUMNS檢視可以找到TEST1
SQL> SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME='TEST1';

COLUMN_NAME
------------------------------
COL1
COL2

--USER_OBJECTS檢視可以找到TEST1,型別為TABLE
SQL> SQL> SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_NAME='TEST2';

OBJECT_NAME OBJECT_TYPE
-------------------------------------------------------------------------------- ------------------
TEST2 TABLE
;

OBJECT_NAME OBJECT_TYPE
-------------------------------------------------------------------------------- ------------------
TEST1 TABLE
2、除物件型別還有其他型別(varchar2等)欄位.

SQL> CREATE TABLE TEST2(ID NUMBER,OBJ T_NAME);

Table created

SQL> INSERT INTO TEST2 VALUES(1,T_NAME(1,'1'));

1 row inserted

SQL> INSERT INTO TEST2 VALUES(1,T_NAME(2,'2'));

1 row inserted

SQL> select t.id,t.obj.col1,t.obj.col2 from test2 t;

ID OBJ.COL1 OBJ.COL2
---------- ---------- ------------------------------------------------------------
1 1 1
1 2 2

SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='TEST2';

TABLE_NAME
------------------------------
TEST2

SQL> SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME='TEST2';

COLUMN_NAME
------------------------------
ID
OBJ


如果理解物件導向的概念,物件型別表其實可以發揮CLASS的作用,如果存在多個結構相同的表,可以選擇這種處理。但是要注意和普通表的區別。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242448/,如需轉載,請註明出處,否則將追究法律責任。

相關文章