数据未通过 Oracle 中的 XML 插入 table

Data not inserting into table via XML in Oracle

我正在尝试向我的 Oracle table 中插入几条记录。所以为此我使用 XML。下面是插入到 table.

中的 XML

但是没有任何错误,它没有插入记录。

PROCEDURE UploadGTLData
(
  BulkXML CLOB            
 )
 AS
 XMLType SYS.XMLTYPE;
    BEGIN
    XMLType:= SYS.XMLType.CreateXML(BulkXML);
    DECLARE
    
            ID   NVARCHAR2(100);
            SAP_ID   NVARCHAR2(100);
            CITY      NVARCHAR2(100 CHAR);
            CIRCLE      NVARCHAR2(100 CHAR);
            FINAL_SO_DATE     NVARCHAR2(100 CHAR);
            INVOICE_DATE      NVARCHAR2(100 CHAR);
            IP_ID            NVARCHAR2(100 CHAR);
            APPLICABLE_MSA    NVARCHAR2(100 CHAR);
            SITE_CATEGORY     NVARCHAR2(100 CHAR);
            ID_OD             NVARCHAR2(100 CHAR);
            RFI_DATE         NVARCHAR2(100 CHAR);
            BILL_START_DATE   NVARCHAR2(100 CHAR);
            BILL_END_DATE     NVARCHAR2(100 CHAR);
            NO_OF_OPCO        NVARCHAR2(100 CHAR);
            ACTUAL_RENT_AMT   NVARCHAR2(100 CHAR);
            TENURE            NVARCHAR2(100 CHAR);
            MW_ANTENNA_OF_UPTO06_DIA   NVARCHAR2(100 CHAR);
            MW_ANTENNA_OF_12DIA       NVARCHAR2(100 CHAR);
            MW_ANTENNA_OF_GREATER12_DIA    NVARCHAR2(100 CHAR);
            HEIGHT_OF_HEIGHEST_ANTENNA    NVARCHAR2(100 CHAR);
            SITE_RRH_COUNT                  NVARCHAR2(100 CHAR);
            WIND_SPEED                       NVARCHAR2(100 CHAR);
            GREATER_9_RRH                   NVARCHAR2(100 CHAR);
            FLOOR_SPACE_INDOOR              NVARCHAR2(100 CHAR); 
            FLOOR_SPACE_OUTDOOR             NVARCHAR2(100 CHAR);
            EB_STATUS_VALUE                 NVARCHAR2(100 CHAR);
            NO_OF_US                       NVARCHAR2(100 CHAR);
            VOLUME_DISCOUNT                  NVARCHAR2(100 CHAR);           
            
            BEGIN            
            FOR RECD IN           
            (            
            SELECT            
            Records.EXTRACT('//RecodSet/ID/text()').getstringval() As ID,
            Records.EXTRACT('//RecodSet/SAP_ID/text()').getstringval() As SAP_ID,            
            Records.EXTRACT('//RecodSet/CITY/text()').getstringval() As CITY,            
            Records.EXTRACT('//RecodSet/CIRCLE/text()').getstringval() As CIRCLE,
            Records.EXTRACT('//RecodSet/FINAL_SO_DATE/text()').getstringval() As FINAL_SO_DATE,            
            Records.EXTRACT('//RecodSet/INVOICE_DATE/text()').getstringval() As INVOICE_DATE , 
            Records.EXTRACT('//RecodSet/IP_ID/text()').getstringval() As IP_ID  ,          
            Records.EXTRACT('//RecodSet/APPLICABLE_MSA/text()').getstringval() As APPLICABLE_MSA,
            Records.EXTRACT('//RecodSet/SITE_CATEGORY/text()').getstringval() As SITE_CATEGORY,
            Records.EXTRACT('//RecodSet/ID_OD/text()').getstringval() As ID_OD ,           
            Records.EXTRACT('//RecodSet/RFI_DATE/text()').getstringval() As RFI_DATE ,
            Records.EXTRACT('//RecodSet/BILL_START_DATE/text()').getstringval() As BILL_START_DATE,
            Records.EXTRACT('//RecodSet/BILL_END_DATE/text()').getstringval() As BILL_END_DATE ,
            Records.EXTRACT('//RecodSet/NO_OF_OPCO/text()').getstringval() As NO_OF_OPCO  ,
            Records.EXTRACT('//RecodSet/ACTUAL_RENT_AMT/text()').getstringval() As ACTUAL_RENT_AMT,
            Records.EXTRACT('//RecodSet/TENURE/text()').getstringval() As TENURE ,
            Records.EXTRACT('//RecodSet/MW_ANTENNA_OF_UPTO06_DIA /text()').getstringval() As MW_ANTENNA_OF_UPTO06_DIA ,
            Records.EXTRACT('//RecodSet/MW_ANTENNA_OF_12DIA/text()').getstringval() As MW_ANTENNA_OF_12DIA,
            Records.EXTRACT('//RecodSet/MW_ANTENNA_OF_GREATER12_DIA/text()').getstringval() As MW_ANTENNA_OF_GREATER12_DIA ,
            Records.EXTRACT('//RecodSet/HEIGHT_OF_HEIGHEST_ANTENNA/text()').getstringval() As HEIGHT_OF_HEIGHEST_ANTENNA ,
            Records.EXTRACT('//RecodSet/SITE_RRH_COUNT/text()').getstringval() As SITE_RRH_COUNT ,            
            Records.EXTRACT('//RecodSet/WIND_SPEED/text()').getstringval() As WIND_SPEED ,
            Records.EXTRACT('//RecodSet/GREATER_9_RRH/text()').getstringval() As GREATER_9_RRH ,
            Records.EXTRACT('//RecodSet/FLOOR_SPACE_INDOOR/text()').getstringval() As FLOOR_SPACE_INDOOR ,
            Records.EXTRACT('//RecodSet/FLOOR_SPACE_OUTDOOR/text()').getstringval() As FLOOR_SPACE_OUTDOOR ,            
            Records.EXTRACT('//RecodSet/EB_STATUS_VALUE/text()').getstringval() As EB_STATUS_VALUE ,
            Records.EXTRACT('//RecodSet/NO_OF_US/text()').getstringval() As NO_OF_US ,
            Records.EXTRACT('//RecodSet/VOLUME_DISCOUNT/text()').getstringval() As VOLUME_DISCOUNT            
            
            
            FROM TABLE(XMLSequence(XMLType.EXTRACT('//NewDataSet/RecodSet')))Records
            )LOOP
            DBMS_OUTPUT.PUT_LINE('INLOOP');            
            INSERT INTO IPCOLO_IPFEE_CALC_GTL(ID,SAP_ID,CITY,CIRCLE,FINAL_SO_DATE,INVOICE_DATE,IP_ID, APPLICABLE_MSA,SITE_CATEGORY,ID_OD,RFI_DATE,BILL_START_DATE,BILL_END_DATE ,NO_OF_OPCO,ACTUAL_RENT_AMT ,TENURE, MW_ANTENNA_OF_UPTO06_DIA, MW_ANTENNA_OF_12DIA, MW_ANTENNA_OF_GREATER12_DIA, HEIGHT_OF_HEIGHEST_ANTENNA, SITE_RRH_COUNT, WIND_SPEED, GREATER_9_RRH, FLOOR_SPACE_INDOOR, FLOOR_SPACE_OUTDOOR, EB_STATUS_VALUE, NO_OF_US, VOLUME_DISCOUNT)                                    
            VALUES (RECD.ID,RECD.SAP_ID,RECD.CITY,RECD.CIRCLE,RECD.FINAL_SO_DATE,RECD.INVOICE_DATE,RECD.IP_ID, RECD.APPLICABLE_MSA, RECD.SITE_CATEGORY,RECD.ID_OD, RECD.RFI_DATE,RECD.BILL_START_DATE,RECD.BILL_END_DATE , RECD.NO_OF_OPCO, RECD.ACTUAL_RENT_AMT ,RECD.TENURE, RECD.MW_ANTENNA_OF_UPTO06_DIA, RECD.MW_ANTENNA_OF_12DIA, RECD.MW_ANTENNA_OF_GREATER12_DIA, RECD.HEIGHT_OF_HEIGHEST_ANTENNA, RECD.SITE_RRH_COUNT, RECD.WIND_SPEED, RECD.GREATER_9_RRH, RECD.FLOOR_SPACE_INDOOR, RECD.FLOOR_SPACE_OUTDOOR, RECD.EB_STATUS_VALUE, RECD.NO_OF_US, RECD.VOLUME_DISCOUNT);
            
            END LOOP;
            DBMS_OUTPUT.PUT_LINE('OUTLOOP');
            END;


END UploadGTLData;

下面还有table desc

Name                        Null Type           
--------------------------- ---- -------------- 
ID                               NVARCHAR2(100) 
SAP_ID                           NVARCHAR2(100) 
CITY                             NVARCHAR2(100) 
CIRCLE                           NVARCHAR2(100) 
FINAL_SO_DATE                    NVARCHAR2(100) 
INVOICE_DATE                     NVARCHAR2(100) 
IP_ID                            NVARCHAR2(100) 
APPLICABLE_MSA                   NVARCHAR2(100) 
SITE_CATEGORY                    NVARCHAR2(100) 
ID_OD                            NVARCHAR2(100) 
RFI_DATE                         NVARCHAR2(100) 
BILL_START_DATE                  NVARCHAR2(100) 
BILL_END_DATE                    NVARCHAR2(100) 
NO_OF_OPCO                       NVARCHAR2(100) 
ACTUAL_RENT_AMT                  NVARCHAR2(100) 
TENURE                           NVARCHAR2(100) 
MW_ANTENNA_OF_UPTO06_DIA         NVARCHAR2(100) 
MW_ANTENNA_OF_12DIA              NVARCHAR2(100) 
MW_ANTENNA_OF_GREATER12_DIA      NVARCHAR2(100) 
HEIGHT_OF_HEIGHEST_ANTENNA       NVARCHAR2(100) 
SITE_RRH_COUNT                   NVARCHAR2(100) 
WIND_SPEED                       NVARCHAR2(100) 
GREATER_9_RRH                    NVARCHAR2(100) 
FLOOR_SPACE_INDOOR               NVARCHAR2(100) 
FLOOR_SPACE_OUTDOOR              NVARCHAR2(100) 
EB_STATUS_VALUE                  NVARCHAR2(100) 
NO_OF_US                         NVARCHAR2(100) 
VOLUME_DISCOUNT                  NVARCHAR2(100) 

生成的XML低于

<DocumentElement>
  <RecodSet>
    <ID>1</ID>
    <SAP_ID>I-HR-BWKR-ENB-G001</SAP_ID>
    <CITY>OTHERS</CITY>
    <CIRCLE>Haryana</CIRCLE>
    <FINAL_SO_DATE>05-08-2016</FINAL_SO_DATE>
    <INVOICE_DATE>05-07-2021</INVOICE_DATE>
    <IP_ID>HAR/GBT/A/05661</IP_ID>
    <APPLICABLE_MSA>MSA_1</APPLICABLE_MSA>
    <SITE_CATEGORY>GBT</SITE_CATEGORY>
    <ID_OD>OD</ID_OD>
    <RFI_DATE>27-10-2016</RFI_DATE>
    <BILL_START_DATE>01-07-2021</BILL_START_DATE>
    <BILL_END_DATE>31-07-2021</BILL_END_DATE>
    <NO_OF_OPCO>2</NO_OF_OPCO>
    <ACTUAL_RENT_AMT>0</ACTUAL_RENT_AMT>
    <TENURE>10</TENURE>
    <MW_ANTENNA_OF_UPTO06_DIA>0</MW_ANTENNA_OF_UPTO06_DIA>
    <MW_ANTENNA_OF_12DIA>0</MW_ANTENNA_OF_12DIA>
    <MW_ANTENNA_OF_GREATER12_DIA>0</MW_ANTENNA_OF_GREATER12_DIA>
    <HEIGHT_OF_HEIGHEST_ANTENNA>0.00</HEIGHT_OF_HEIGHEST_ANTENNA>
    <SITE_RRH_COUNT>9</SITE_RRH_COUNT>
    <WIND_SPEED>0</WIND_SPEED>
    <GREATER_9_RRH>0</GREATER_9_RRH>
    <FLOOR_SPACE_INDOOR>0</FLOOR_SPACE_INDOOR>
    <FLOOR_SPACE_OUTDOOR>0</FLOOR_SPACE_OUTDOOR>
    <EB_STATUS_VALUE>Y</EB_STATUS_VALUE>
    <NO_OF_US>0</NO_OF_US>
    <VOLUME_DISCOUNT>N</VOLUME_DISCOUNT>
  </RecodSet>
</DocumentElement>

我哪里错了?

只需使用 XMLTABLE:

中的 INSERT ... SELECT ...
CREATE PROCEDURE UploadGTLData(
  BulkXML IN CLOB
)
AS
BEGIN
  INSERT INTO IPCOLO_IPFEE_CALC_GTL(
    ID,
    SAP_ID,
    CITY,
    CIRCLE,
    FINAL_SO_DATE,
    INVOICE_DATE
  )
  SELECT ID,
         SAP_ID,
         CITY,
         CIRCLE,
         FINAL_SO_DATE,
         INVOICE_DATE
  FROM   XMLTABLE(
           '/DocumentElement/RecodSet'
           PASSING XMLTYPE( BulkXML )
           COLUMNS
             id            NVARCHAR2(100) PATH './ID',
             sap_id        NVARCHAR2(100) PATH './SAP_ID',
             city          NVARCHAR2(100) PATH './CITY',
             circle        NVARCHAR2(100) PATH './CIRCLE',
             final_so_date NVARCHAR2(100) PATH './FINAL_SO_DATE',
             invoice_date  NVARCHAR2(100) PATH './INVOICE_DATE'
         );
END UploadGTLData;
/

然后你可以调用它:

BEGIN
  UploadGTLData(
    '<DocumentElement>
  <RecodSet>
    <ID>1</ID>
    <SAP_ID>I-HR-BWKR-ENB-G001</SAP_ID>
    <CITY>OTHERS</CITY>
    <CIRCLE>Haryana</CIRCLE>
    <FINAL_SO_DATE>05-08-2016</FINAL_SO_DATE>
    <INVOICE_DATE>05-07-2021</INVOICE_DATE>
  </RecodSet>
</DocumentElement>'
  );
END;
/

您可以修改它以添加其他列。

db<>fiddle here