Miley's Oracle讲堂第三课:如何在Oracle中使用对象表存储数据.

   在实际工作中,业务涉及需要记录物流行程中出错的数据以方便分析问题,需要把原始数据保留在对象表中。打比方说今天有个司机把今天手持设备上的数据上传到服务器,但是报错了服务器端。那么我们可以存储下来上传的原始数据已进行分析。
创建对象表的脚本如下,关键部位已经突出显示。
在这里需要注意的是ROUTE_STOPS_ST
类似此类ST结尾的都会在Oracle中以表的形式存在。
这样一个上传的分级式记录只会以一条记录的形式存在TMS_OBJ_ROUTE_DATA中,在toad中可以非常清晰的看到其中的数据.PS:别的软件应该也能显示数据表数据,笔者只用toad因为某种原因。
希望本文能对大家今后使用对象表有所帮助。
 
DROP TABLE TMS.TMS_OBJ_ROUTE_DATA CASCADE CONSTRAINTS;

CREATE TABLE TMS.TMS_OBJ_ROUTE_DATA
(
  ROUTE_HEADER_COL,
  ROUTE_STOPS_COL      TMS.ROUTE_STOPS,
  PO_COL               TMS.POS,
  STOP_DETAILS_COL  TMS.STOP_DETAILS,
  PO_STOP_DETAILS_COL  TMS.PO_STOP_DETAILS,
  EXPT_TEXT_COL        VARCHAR2(512 BYTE),
  EXPT_CODE_COL        VARCHAR2(10 BYTE),
  SVR_DATE_COL         DATE,
  DEVICE_ID_COL        VARCHAR2(20 BYTE),
  INSTANCEID_COL       INTEGER
)
NESTED TABLE ROUTE_STOPS_COL STORE AS ROUTE_STOPS_ST,
NESTED TABLE PO_COL STORE AS POS_ST,
NESTED TABLE STOP_DETAILS_COL STORE AS STOP_DETAILS_ST,
NESTED TABLE PO_STOP_DETAILS_COL STORE AS PO_STOP_DETAILS_ST,
NESTED TABLE SETTINGS_COL STORE AS SETTINGS_ST

TABLESPACE TMSDATA
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          104K
            NEXT             104K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;

其中绿色的部分都是Collection types,是由Object types组成的。

具体脚本(节选PO_STOP_DETAILS,POS)如下:

CREATE OR REPLACE TYPE TMS.PO_STOP_DETAIL AS OBJECT
(
  stop_detail_id INTEGER,
  po_id VARCHAR(10),
  stop_id INTEGER,
  delete_flag CHAR(1),
  sync_statuc CHAR(1)
)
/

CREATE OR REPLACE TYPE TMS.PO_STOP_DETAILS AS
  TABLE OF po_stop_detail
/

CREATE OR REPLACE TYPE TMS.PO AS OBJECT
(
  stop_id INTEGER,
  po_id VARCHAR(10),
  delete_flag CHAR(1),
  weight INTEGER,
  weight_uom VARCHAR(3),
  sync_statuc CHAR(1)
)
/
CREATE OR REPLACE TYPE TMS.POS AS
  TABLE OF po
/

插入此类记录也比较简单,类似如下脚本:
INSERT INTO tms_obj_route_data
                  VALUES (p_route_data.route_header, p_route_data.route_stops,
                          p_route_data.stop_pos, p_route_data.stop_details,
                          p_route_data.po_stop_details,
                          'Exception code can not be null when the status is E',
                          v_instance_id);
魔兽就是毒瘤,大家千万不要玩。
原文地址:https://www.cnblogs.com/tracy/p/1763229.html