ORA-14400錯誤

編寫存儲過程出現錯誤:

ORA-14400: inserted partition key does not map to any partition

錯誤在於P_ODS_A_AC_ACCOUNT_GSM 

Execute Immediate 'ALTER TABLE ODS_A_AC_ACCOUNT_GSM TRUNCATE SUBPARTITION PART' || V_ACCT_MONTH || '_SP_' || V_ACCT_DAY;

V_ACCT_DAY是類似如“20090811這樣的Date類型,是八位。而PART+年月+日,故此V_ACCT_DAY改爲V_DAY。正確的代碼如下(完整):

代碼如下:

一、創建表空間。

CREATE TABLE ODS.ODS_A_AC_ACCOUNT_GSM

(

         ACCT_MONTH                           VARCHAR2(6)   ,                  -- 賬期 

         DAY_ID                                                VARCHAR2(20)  ,           -- 日(子分區)                               

         AREA_NO                                 VARCHAR2(10)  ,                        -- 地市         

         CITY_NO                                  VARCHAR2(10)  ,           -- 區縣         

         REGION_ID                                 VARCHAR2(18)  ,                                -- 行政區域     

         ACCTID                  CHAR(14)      ,           -- 帳戶標識   

         CONTACTID               CHAR(10)      ,           -- 聯繫人ID   

         CUSTID                  CHAR(14)      ,           -- 客戶ID     

         MEMOCODE                VARCHAR2(60)  ,           -- 備忘錄       

         ACCTTYPE                CHAR(2)       ,           -- 賬戶類型   

         PAYWAY                  NUMBER(6)     ,           -- 支付方式   

         DEDUCTPACE              NUMBER(10)    ,           -- 扣除金額           

         BANKCODE                CHAR(2)       ,           -- 銀行代碼   

         BRANCHCODE              CHAR(8)       ,           -- 分行代碼   

         BANKACCT                VARCHAR2(60)  ,          -- 銀行賬戶   

         BANKACCTNAME            VARCHAR2(60)  ,                  -- 銀行賬戶名稱

         BANKACCTBALANCE         NUMBER(10)    ,                 -- 銀行賬戶餘額

         CREDITLEVEL             NUMBER(10)    ,            -- 信用級別   

         BANKACCTPWD             VARCHAR2(20)  ,                  -- 銀行賬戶密碼

         DETAILSENDTYPE          CHAR(1)       ,             -- 詳細發送類型

         BILLSENDTYPE            CHAR(1)       ,              -- 賬單發送類型

         SENDCONTACTID           CHAR(14)      ,            -- 發送聯繫人ID

         POSTADDR                VARCHAR2(256) ,             -- 郵寄地址

         POST                    CHAR(6)       ,                -- 郵編  

         ACCTSTAT                CHAR(1)       ,              -- 賬戶狀態   

         CSGNCON                 VARCHAR2(14)  ,            --            

         CRTOPTR                 CHAR(8)       ,              -- 創建人      

         CRTDATE                 DATE          ,           -- 創建日期   

         OPTRID                  CHAR(8)       ,           -- 操作員     

         OPTDATE                 DATE          ,           -- 操作日期   

         STAND                   CHAR(1)       ,           -- 備註        

         REMARK                  VARCHAR2(60)  ,           -- 備註                  

         INSERT_DATE                             DATE                                    -- 插入時間 

)     

COMPRESS

TABLESPACE TBS_MID

PARTITION BY RANGE (ACCT_MONTH)

SUBPARTITION BY LIST (DAY_ID)

SUBPARTITION TEMPLATE

(SUBPARTITION SP_01 VALUES ('01'),

 SUBPARTITION SP_02 VALUES ('02'),

 SUBPARTITION SP_03 VALUES ('03'),

 SUBPARTITION SP_04 VALUES ('04'),

 SUBPARTITION SP_05 VALUES ('05'),

 SUBPARTITION SP_06 VALUES ('06'),

 SUBPARTITION SP_07 VALUES ('07'),

 SUBPARTITION SP_08 VALUES ('08'),

 SUBPARTITION SP_09 VALUES ('09'),

 SUBPARTITION SP_10 VALUES ('10'),

 SUBPARTITION SP_11 VALUES ('11'),

 SUBPARTITION SP_12 VALUES ('12'),

 SUBPARTITION SP_13 VALUES ('13'),

 SUBPARTITION SP_14 VALUES ('14'),

 SUBPARTITION SP_15 VALUES ('15'),

 SUBPARTITION SP_16 VALUES ('16'),

 SUBPARTITION SP_17 VALUES ('17'),

 SUBPARTITION SP_18 VALUES ('18'),

 SUBPARTITION SP_19 VALUES ('19'),

 SUBPARTITION SP_20 VALUES ('20'),

 SUBPARTITION SP_21 VALUES ('21'),

 SUBPARTITION SP_22 VALUES ('22'),

 SUBPARTITION SP_23 VALUES ('23'),

 SUBPARTITION SP_24 VALUES ('24'),

 SUBPARTITION SP_25 VALUES ('25'),

 SUBPARTITION SP_26 VALUES ('26'),

 SUBPARTITION SP_27 VALUES ('27'),

 SUBPARTITION SP_28 VALUES ('28'),

 SUBPARTITION SP_29 VALUES ('29'),

 SUBPARTITION SP_30 VALUES ('30'),

 SUBPARTITION SP_31 VALUES ('31'))

( PARTITION PART200908 VALUES LESS THAN ('200909') COMPRESS NOLOGGING TABLESPACE TBS_MID,

  PARTITION PART200909 VALUES LESS THAN ('200910') COMPRESS NOLOGGING TABLESPACE TBS_MID  

);

COMMENT ON TABLE ODS.ODS_A_AC_ACCOUNT_GSM is '賬戶信息表';                                               

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.ACCT_MONTH        is '賬期             ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.DAY_ID               is '日(子分區)        ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.AREA_NO           is '地市             ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.CITY_NO           is '區縣             ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.REGION_ID         is '行政區域         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.ACCTID            is '帳戶標識         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.CONTACTID         is '聯繫人ID         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.CUSTID            is '客戶ID           ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.MEMOCODE          is '備忘錄           ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.ACCTTYPE          is '賬戶類型         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.PAYWAY            is '支付方式           ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.DEDUCTPACE        is '扣除金額        ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.BANKCODE          is '銀行代碼        ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.BRANCHCODE        is '分行代碼         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.BANKACCT          is '銀行賬戶         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.BANKACCTNAME      is '銀行賬戶名稱           ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.BANKACCTBALANCE   is '銀行賬戶餘額     ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.CREDITLEVEL       is '信用級別         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.BANKACCTPWD       is '銀行賬戶密碼           ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.DETAILSENDTYPE    is '詳細發送類型     ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.BILLSENDTYPE      is '賬單發送類型     ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.SENDCONTACTID     is '發送聯繫人ID     ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.POSTADDR          is '郵寄地址         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.POST              is '郵編             ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.ACCTSTAT          is '賬戶狀態         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.CSGNCON           is '                 ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.CRTOPTR           is '創建人           ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.CRTDATE           is '創建日期         ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.OPTRID            is '操作員           ';

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.OPTDATE           is '操作日期         '; 

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.STAND             is '備註             '; 

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.REMARK            is '備註             '; 

COMMENT ON COLUMN ODS.ODS_A_AC_ACCOUNT_GSM.INSERT_DATE       is '插入時間         '; 

 

二、導入數據。

CREATE OR REPLACE PROCEDURE P_ODS_A_AC_ACCOUNT_GSM(V_ACCT_DAY VARCHAR2,

                                                   V_RETCODE  OUT VARCHAR2, --輸出變量

                                                   V_RETINFO  OUT VARCHAR2) IS

 

  ----------------------過程信息-------------------------------------------

  -- 名:--%NAME P_ODS_A_AC_ACCOUNT_GSM

  --功能描述:--%COMMENT 賬戶信息()

  -- 人:--%CREATOR 沈曉瑞

  --創建時間:--%CREATED_TIME 20090819

  --數據源  --%FROM STAGE.FT_CI_ACCTINFO_A_D

  --目標表  --%TO ODS.ODS_A_AC_ACCOUNT_GSM

  --    數:--%PARAM V_ACCT_DAY 日期(YYYYMMDD)

  --%PARAM V_RETCODE  輸出變量:執行結果,SUCCESS/FAIL/WAIT

  --%PARAM V_RETINFO  輸出變量:執行結果描述,比如錯誤信息(SQLERRM)

  --執行週期:--%PERIOD

  --執行時長:

  --注意事項:--%REMARK

  --修改記錄:--%MODIFY 修改內容 修改人 修改日期

  --------------------------------------------------------------------------

 

  V_ROWCOUNT   NUMBER; ----用於保存記錄數

  V_PKG        VARCHAR2(40); ----過程包名

  V_PROCNAME   VARCHAR2(100); ----過程名

  V_CNT        NUMBER;

  V_DATE       DATE;

  V_ACCT_MONTH varchar2(6);

  v_DAY        VARCHAR2(2);

BEGIN

  V_PKG      := 'P_ODS_O_CI_CUST_GSM';

  V_PROCNAME := 'P_ODS_O_CI_CUST_GSM';

 

  --插入開始日誌

  REPORT.P_INSERT_LOG(V_ACCT_DAY, V_PKG, V_PROCNAME, '賬戶信息', v_date);

  V_ACCT_MONTH := SUBSTR(V_ACCT_DAY, 1, 6);

  V_DAY        := SUBSTR(V_ACCT_DAY, 7, 2);

 

  /*  --查看是過程是否正在運行

    SELECT COUNT(DISTINCT tl.procname)

      INTO V_CNT

      FROM REPORT.T_LOG tl

     WHERE tl.logdate = V_ACCT_DAY

       and tl.pkg_name = V_PKG

       and tl.procname = V_PROCNAME

       AND tl.flag = 'SUCCESS';

 

    IF V_CNT = 0 THEN

  */

  --插入開始日誌

  /*    REPORT.P_INSERT_LOG(V_ACCT_DAY, V_PKG, V_PROCNAME, V_LOG_MSG, V_TIME);

  SELECT COUNT(*)

    INTO V_CNT

    FROM ODS.ODS_FT_ppsgprsflowcdr AAA

   WHERE AAA.ACCT_MONTH = V_ACCT_DAY

     AND ROWNUM <= 1;*/

 

  --如果存在則刪除當期數據

  V_CNT := 1;

  IF V_CNT = 1 Then

    -----刪除當期數據

 

    Execute Immediate 'ALTER TABLE ODS_A_AC_ACCOUNT_GSM TRUNCATE SUBPARTITION PART' ||

                      V_ACCT_MONTH || '_SP_' || V_DAY;

 

    --插入記錄

    insert /*+APPEND*/

    into ODS.ODS_A_AC_ACCOUNT_GSM

      (ACCT_MONTH, -- 賬期

       DAY_ID, -- 日(子分區)

       AREA_NO, -- 地市

       CITY_NO, -- 區縣

       REGION_ID, -- 行政區域

       ACCTID, -- 帳戶標識

       CONTACTID, -- 聯繫人ID

       CUSTID, -- 客戶ID

       MEMOCODE, -- 備忘錄

       ACCTTYPE, -- 賬戶類型

       PAYWAY, -- 支付方式

       DEDUCTPACE, -- 扣除金額

       BANKCODE, -- 銀行代碼

       BRANCHCODE, -- 分行代碼

       BANKACCT, -- 銀行賬戶

       BANKACCTNAME, -- 銀行賬戶名稱

       BANKACCTBALANCE, -- 銀行賬戶餘額

       CREDITLEVEL, -- 信用級別

       BANKACCTPWD, -- 銀行賬戶密碼

       DETAILSENDTYPE, -- 詳細發送類型

       BILLSENDTYPE, -- 賬單發送類型

       SENDCONTACTID, -- 發送聯繫人ID

       POSTADDR, -- 郵寄地址

       POST, -- 郵編

       ACCTSTAT, -- 賬戶狀態

       CSGNCON, --

       CRTOPTR, -- 創建人

       CRTDATE, -- 創建日期

       OPTRID, -- 操作員

       OPTDATE, -- 操作日期

       STAND, -- 備註

       REMARK, -- 備註

       INSERT_DATE -- 插入時間

       )

      select V_ACCT_MONTH      AS ACCT_MONTH,

             v_day             AS DAY_ID,

             NULL              AS AREA_NO,

             NULL              AS CITY_NO,

             NULL              AS REGION_ID,

             A.ACCTID          AS ACCTID,

             A.CONTACTID       AS CONTACTID,

             A.CUSTID          AS CUSTID,

             A.MEMOCODE        AS MEMOCODE,

             A.ACCTTYPE        AS ACCTTYPE,

             A.PAYWAY          AS PAYWAY,

             A.DEDUCTPACE      AS DEDUCTPACE,

             A.BANKCODE        AS BANKCODE,

             A.BRANCHCODE      AS BRANCHCODE,

             A.BANKACCT        AS BANKACCT,

             A.BANKACCTNAME    AS BANKACCTNAME,

             A.BANKACCTBALANCE AS BANKACCTBALANCE,

             A.CREDITLEVEL     AS CREDITLEVEL,

             A.BANKACCTPWD     AS BANKACCTPWD,

             A.DETAILSENDTYPE  AS DETAILSENDTYPE,

             A.BILLSENDTYPE    AS BILLSENDTYPE,

             A.SENDCONTACTID   AS SENDCONTACTID,

             A.POSTADDR        AS POSTADDR,

             A.POST            AS POST,

             A.ACCTSTAT        AS ACCTSTAT,

             A.CSGNCON         AS CSGNCON,

             A.CRTOPTR         AS CRTOPTR,

             A.CRTDATE         AS CRTDATE,

             A.OPTRID          AS OPTRID,

             A.OPTDATE         AS OPTDATE,

             A.STAND           AS STAND,

             A.REMARK          AS REMARK,

             sysdate           as INSERT_DATE

        from stage.FT_CI_ACCTINFO_A_D a;

 

    V_ROWCOUNT := SQL%ROWCOUNT;

    Commit;

 

    --更新日誌

    V_RETCODE := 'SUCCESS';

    V_RETINFO := '結束';

  ELSE

    V_RETCODE := 'WAIT';

    V_RETINFO := '等待';

  END IF;

 

  REPORT.P_UPDATE_LOG(V_ACCT_DAY,

                      V_PKG,

                      V_PROCNAME,

                      V_RETCODE,

                      V_RETINFO,

                      SYSDATE,

                      V_ROWCOUNT);

 

  --異常拋出

EXCEPTION

  WHEN OTHERS THEN

    V_RETCODE := 'FAIL';

    V_RETINFO := SQLERRM;

    REPORT.P_UPDATE_LOG(V_ACCT_DAY,

                        V_PKG,

                        V_PROCNAME,

                        V_RETCODE,

                        V_RETINFO,

                        SYSDATE,

                        V_ROWCOUNT);

END;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章