【问题标题】:Standard process suddenly throwing ORA-02270 error标准进程突然抛出 ORA-02270 错误
【发布时间】:2018-09-28 16:41:44
【问题描述】:

我从一个同事那里继承了一系列 SQL 脚本,我每年运行几次,现在已经有几年了。这一次,我遇到了一个我从未见过的错误。代码如下:

    /* First drop and then create table scbcrse_xref */
    DROP TABLE ddef_stag.SCBCRSE_XREF;
    CREATE TABLE ddef_stag.SCBCRSE_XREF AS SELECT
    ddef_stag.SSBSECT.ssbsect_term_code,
    ddef_stag.SSBSECT.ssbsect_crn,
    ddef_stag.SSBSECT.ssbsect_subj_code,
    ddef_stag.SSBSECT.ssbsect_crse_numb,
    MAX(ddef_stag.SCBCRSE.scbcrse_eff_term) "SCBCRSE_MAX_EFF_TERM"
    FROM ddef_stag.SCBCRSE, ddef_stag.SSBSECT
    WHERE ddef_stag.SCBCRSE.scbcrse_subj_code = ddef_stag.SSBSECT.ssbsect_subj_code  AND 
          ddef_stag.SCBCRSE.scbcrse_crse_numb = ddef_stag.SSBSECT.ssbsect_crse_numb  AND
          ddef_stag.SCBCRSE.scbcrse_eff_term <= ddef_stag.SSBSECT.ssbsect_term_code  
    GROUP BY ddef_stag.SSBSECT.ssbsect_term_code, ddef_stag.SSBSECT.ssbsect_crn,
 ddef_stag.SSBSECT.ssbsect_subj_code, ddef_stag.SSBSECT.ssbsect_crse_numb;
    -----------------------------------------------------------------------------
    /* Add foreign key constraint on scbcrse_xref */
    ALTER TABLE ddef_stag.SCBCRSE_XREF ADD 
    CONSTRAINT SCBCRSE_XREF_SSBSECT_FK
    FOREIGN KEY (ssbsect_term_code, ssbsect_crn)
    REFERENCES  SSBSECT(ssbsect_term_code, ssbsect_crn);
    -----------------------------------------------------------------------------
    /* Add foreign key constraint on scbcrse_xref */

    ALTER TABLE ddef_stag.SCBCRSE_XREF ADD 
    CONSTRAINT SCBCRSE_XREF_SCBCRSE_FK
    FOREIGN KEY (ssbsect_subj_code, ssbsect_crse_numb, scbcrse_max_eff_term)
    REFERENCES  SCBCRSE (scbcrse_subj_code, scbcrse_crse_numb, scbcrse_eff_term);

两个外键约束都给出错误: ORA-02270: 此列列表没有匹配的唯一键或主键

查看 SCBCRSE 和 SSBSECT 的表信息,它们看起来好像启用了正确的主键。我查看了 SCBCRSE 和 SSBSECT,这两个表之间的连接没有明显的问题。出了什么问题?我还能检查什么?

编辑:我被要求发布所涉及表的 describe():

describe scbcrse
TABLE scbcrse
 Name                                      Null?    Type                        
 ----------------------------------------- -------- ----------------------------
 SCBCRSE_SUBJ_CODE                         NOT NULL VARCHAR2(16)                
 SCBCRSE_CRSE_NUMB                         NOT NULL VARCHAR2(20)                
 SCBCRSE_EFF_TERM                          NOT NULL VARCHAR2(24)                
 SCBCRSE_COLL_CODE                                  VARCHAR2(8)                 
 SCBCRSE_DIVS_CODE                                  VARCHAR2(16)                
 SCBCRSE_DEPT_CODE                                  VARCHAR2(16)                
 SCBCRSE_CSTA_CODE                                  VARCHAR2(4)                 
 SCBCRSE_TITLE                                      VARCHAR2(120)               
 SCBCRSE_CIPC_CODE                                  VARCHAR2(24)                
 SCBCRSE_CREDIT_HR_IND                              VARCHAR2(8)                 
 SCBCRSE_CREDIT_HR_LOW                              NUMBER(7,3)                 
 SCBCRSE_CREDIT_HR_HIGH                             NUMBER(7,3)                 
 SCBCRSE_LEC_HR_IND                                 VARCHAR2(8)                 
 SCBCRSE_LEC_HR_LOW                                 NUMBER(7,3)                 
 SCBCRSE_LEC_HR_HIGH                                NUMBER(7,3)                 
 SCBCRSE_LAB_HR_IND                                 VARCHAR2(8)                 
 SCBCRSE_LAB_HR_LOW                                 NUMBER(7,3)                 
 SCBCRSE_LAB_HR_HIGH                                NUMBER(7,3)                 
 SCBCRSE_OTH_HR_IND                                 VARCHAR2(8)                 
 SCBCRSE_OTH_HR_LOW                                 NUMBER(7,3)                 
 SCBCRSE_OTH_HR_HIGH                                NUMBER(7,3)                 
 SCBCRSE_BILL_HR_IND                                VARCHAR2(8)                 
 SCBCRSE_BILL_HR_LOW                                NUMBER(7,3)                 
 SCBCRSE_BILL_HR_HIGH                               NUMBER(7,3)                 
 SCBCRSE_APRV_CODE                                  VARCHAR2(4)                 
 SCBCRSE_REPEAT_LIMIT                               NUMBER(2)                   
 SCBCRSE_PWAV_CODE                                  VARCHAR2(4)                 
 SCBCRSE_TUIW_IND                                   VARCHAR2(4)                 
 SCBCRSE_ADD_FEES_IND                               VARCHAR2(4)                 
 SCBCRSE_ACTIVITY_DATE                              DATE                        
 SCBCRSE_CONT_HR_LOW                                NUMBER(7,3)                 
 SCBCRSE_CONT_HR_IND                                VARCHAR2(8)                 
 SCBCRSE_CONT_HR_HIGH                               NUMBER(7,3)                 
 SCBCRSE_CEU_IND                                    VARCHAR2(4)                 
 SCBCRSE_REPS_CODE                                  VARCHAR2(8)                 
 SCBCRSE_MAX_RPT_UNITS                              NUMBER(9,3)                 
 SCBCRSE_CAPP_PREREQ_TEST_IND              NOT NULL VARCHAR2(4)                 
 SCBCRSE_DUNT_CODE                                  VARCHAR2(16)                
 SCBCRSE_NUMBER_OF_UNITS                            NUMBER(7,2)                 
 SCBCRSE_DATA_ORIGIN                                VARCHAR2(120)               
 SCBCRSE_USER_ID                                    VARCHAR2(120)               
 SCBCRSE_PREREQ_CHK_METHOD_CDE             NOT NULL VARCHAR2(4)                 
 SCBCRSE_SURROGATE_ID                               NUMBER(19)                  
 SCBCRSE_VERSION                                    NUMBER(19)                  
 SCBCRSE_VPDI_CODE                                  VARCHAR2(24)                

describe ssbsect
TABLE ssbsect
 Name                                      Null?    Type                        
 ----------------------------------------- -------- ----------------------------
 SSBSECT_TERM_CODE                         NOT NULL VARCHAR2(24)                
 SSBSECT_CRN                               NOT NULL VARCHAR2(20)                
 SSBSECT_PTRM_CODE                                  VARCHAR2(12)                
 SSBSECT_SUBJ_CODE                         NOT NULL VARCHAR2(16)                
 SSBSECT_CRSE_NUMB                         NOT NULL VARCHAR2(20)                
 SSBSECT_SEQ_NUMB                          NOT NULL VARCHAR2(12)                
 SSBSECT_SSTS_CODE                         NOT NULL VARCHAR2(4)                 
 SSBSECT_SCHD_CODE                         NOT NULL VARCHAR2(12)                
 SSBSECT_CAMP_CODE                         NOT NULL VARCHAR2(12)                
 SSBSECT_CRSE_TITLE                                 VARCHAR2(120)               
 SSBSECT_CREDIT_HRS                                 NUMBER(7,3)                 
 SSBSECT_BILL_HRS                                   NUMBER(7,3)                 
 SSBSECT_GMOD_CODE                                  VARCHAR2(4)                 
 SSBSECT_SAPR_CODE                                  VARCHAR2(8)                 
 SSBSECT_SESS_CODE                                  VARCHAR2(4)                 
 SSBSECT_LINK_IDENT                                 VARCHAR2(8)                 
 SSBSECT_PRNT_IND                                   VARCHAR2(4)                 
 SSBSECT_GRADABLE_IND                               VARCHAR2(4)                 
 SSBSECT_TUIW_IND                                   VARCHAR2(4)                 
 SSBSECT_REG_ONEUP                         NOT NULL NUMBER(4)                   
 SSBSECT_PRIOR_ENRL                        NOT NULL NUMBER(4)                   
 SSBSECT_PROJ_ENRL                         NOT NULL NUMBER(4)                   
 SSBSECT_MAX_ENRL                          NOT NULL NUMBER(4)                   
 SSBSECT_ENRL                              NOT NULL NUMBER(4)                   
 SSBSECT_SEATS_AVAIL                       NOT NULL NUMBER(4)                   
 SSBSECT_TOT_CREDIT_HRS                             NUMBER(9,3)                 
 SSBSECT_CENSUS_ENRL                                NUMBER(4)                   
 SSBSECT_CENSUS_ENRL_DATE                  NOT NULL DATE                        
 SSBSECT_ACTIVITY_DATE                     NOT NULL DATE                        
 SSBSECT_PTRM_START_DATE                            DATE                        
 SSBSECT_PTRM_END_DATE                              DATE                        
 SSBSECT_PTRM_WEEKS                                 NUMBER(3)                   
 SSBSECT_RESERVED_IND                               VARCHAR2(4)                 
 SSBSECT_WAIT_CAPACITY                              NUMBER(4)                   
 SSBSECT_WAIT_COUNT                                 NUMBER(4)                   
 SSBSECT_WAIT_AVAIL                                 NUMBER(4)                   
 SSBSECT_LEC_HR                                     NUMBER(9,3)                 
 SSBSECT_LAB_HR                                     NUMBER(9,3)                 
 SSBSECT_OTH_HR                                     NUMBER(9,3)                 
 SSBSECT_CONT_HR                                    NUMBER(9,3)                 
 SSBSECT_ACCT_CODE                                  VARCHAR2(8)                 
 SSBSECT_ACCL_CODE                                  VARCHAR2(8)                 
 SSBSECT_CENSUS_2_DATE                              DATE                        
 SSBSECT_ENRL_CUT_OFF_DATE                          DATE                        
 SSBSECT_ACAD_CUT_OFF_DATE                          DATE                        
 SSBSECT_DROP_CUT_OFF_DATE                          DATE                        
 SSBSECT_CENSUS_2_ENRL                              NUMBER(4)                   
 SSBSECT_VOICE_AVAIL                       NOT NULL VARCHAR2(4)                 
 SSBSECT_CAPP_PREREQ_TEST_IND              NOT NULL VARCHAR2(4)                 
 SSBSECT_GSCH_NAME                                  VARCHAR2(40)                
 SSBSECT_BEST_OF_COMP                               NUMBER(3)                   
 SSBSECT_SUBSET_OF_COMP                             NUMBER(3)                   
 SSBSECT_INSM_CODE                                  VARCHAR2(20)                
 SSBSECT_REG_FROM_DATE                              DATE                        
 SSBSECT_REG_TO_DATE                                DATE                        
 SSBSECT_LEARNER_REGSTART_FDATE                     DATE                        
 SSBSECT_LEARNER_REGSTART_TDATE                     DATE                        
 SSBSECT_DUNT_CODE                                  VARCHAR2(16)                
 SSBSECT_NUMBER_OF_UNITS                            NUMBER(7,2)                 
 SSBSECT_NUMBER_OF_EXTENSIONS              NOT NULL NUMBER(3)                   
 SSBSECT_DATA_ORIGIN                                VARCHAR2(120)               
 SSBSECT_USER_ID                                    VARCHAR2(120)               
 SSBSECT_INTG_CDE                                   VARCHAR2(20)                
 SSBSECT_PREREQ_CHK_METHOD_CDE                      VARCHAR2(4)                 
 SSBSECT_SURROGATE_ID                               NUMBER(19)                  
 SSBSECT_VERSION                                    NUMBER(19)                  
 SSBSECT_VPDI_CODE                                  VARCHAR2(24)                
 SSBSECT_KEYWORD_INDEX_ID                           VARCHAR2(120)               

describe SCBCRSE_XREF

TABLE SCBCRSE_XREF
 Name                                      Null?    Type                        
 ----------------------------------------- -------- ----------------------------
 SSBSECT_TERM_CODE                         NOT NULL VARCHAR2(24)                
 SSBSECT_CRN                               NOT NULL VARCHAR2(20)                
 SSBSECT_SUBJ_CODE                         NOT NULL VARCHAR2(16)                
 SSBSECT_CRSE_NUMB                         NOT NULL VARCHAR2(20)                
 SCBCRSE_MAX_EFF_TERM                               VARCHAR2(24)                

【问题讨论】:

  • 这不是一个答案,但如果你想TRUNCATE 表而不是删除它,你就不需要重新创建它,也不需要重新创建外键。除此之外,我建议您在每个表格中发布DESCRIBE
  • 对我来说,这听起来像是长时间运行的查询的结果被修改相关表数据的其他线程破坏了。也就是说,FK 不再可用。我会将CREATE TABLE AS SELECT... 解耦为:1)CREATE TABLE x (col1, col2, fk1, fk2, etc.) 和 2)INSERT INTO x SELECT ...。 FK 将在插入运行时强制执行,然后您会看到 other 进程崩溃:D
  • 我已将 describe() 信息添加到表中。 @the-impaler,我会试试看。

标签: sql oracle key primary-key toad


【解决方案1】:

我与我们的 DBA 交谈,发现 SSBSECT 和 SCBCRSE 的约束未正确启用。启用它们解决了问题。

【讨论】:

  • 因此,您继承的这些脚本从未工作过,或者有人更改了它们。尽管如此,这仍然是与同事交谈而不是在互联网上询问一群陌生人的证明。说话很好!让我们做得更多!
  • 改变的是 DBA 将表从一台服务器传输到另一台服务器。他们一定是关闭了主键但没有重新启用它们。
猜你喜欢
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2022-01-14
  • 2021-09-10
  • 2015-02-23
  • 2017-01-09
  • 1970-01-01
相关资源
最近更新 更多