zoukankan      html  css  js  c++  java
  • 连续创建多个Oracle触发器失败,单个创建才成功的解决方法

    当用到自增序列,需要用到触发器的时候,当我连续执行创建多个触发器时,总是报编译通过,但存在警告或错误。

    ---1.应用信息
    drop table app_info cascade constraints;
    create table APP_INFO
    (
      id      NUMBER(9)   not null,
      appid    VARCHAR2(255)        default NULL,
      appkey    VARCHAR2(255)       default NULL,
      md5_key          VARCHAR2(255)    default NULL,
      aes_key    VARCHAR2(255)      default NULL,
      permission    VARCHAR2(3000)     default NULL,
      email    VARCHAR2(255)       default NULL,
      password    VARCHAR2(255)      default NULL,
      ras_public_key     VARCHAR2(255)  default NULL,
      constraint APP_INFO primary key (id)
    );
    
    drop sequence app_info_id;
    create sequence app_info_id
    increment by 1
    start with 1
    nomaxvalue
    nominvalue
    nocache;
    
    CREATE OR REPLACE TRIGGER addAppInfo BEFORE INSERT ON App_INFO FOR EACH ROW  
     BEGIN  
        SELECT app_info_id.nextval INTO :new.id  FROM dual;  
     END; 
    
    ---2.unit信息
    drop table unit_info cascade constraints;
    create table UNIT_INFO
    (
      UNIT_ID        NUMBER(9)  not null,
      USERID          VARCHAR2(255)        default NULL,
      UNIT_NAME      VARCHAR2(128)        default NULL,
      UNIT_LINKMAN      VARCHAR2(64)    default NULL,
      ORGANIZATION_CODE        VARCHAR2(64)     default NULL,
      constraint UNIT_INFO primary key (UNIT_ID)
    );
    
    drop sequence unit_info_id;
    create sequence unit_info_id
    increment by 1
    start with 1
    nomaxvalue
    nominvalue
    nocache;
    
    CREATE OR REPLACE TRIGGER addUnitInfo BEFORE INSERT ON UNIT_INFO FOR EACH ROW  
     BEGIN  
        SELECT unit_info_id.nextval INTO :new.unit_id  FROM dual;  
     END; 

    错误截图如下:

    这种创建是失败的,因为触发器需要先编译,每创建一个触发器,需要以“/”结束,然后才能执行下一个。

    正确的做法应该是这样的;

    ---1.应用信息
    drop table app_info cascade constraints;
    create table APP_INFO
    (
      id      NUMBER(9)   not null,
      appid    VARCHAR2(255)        default NULL,
      appkey    VARCHAR2(255)       default NULL,
      md5_key          VARCHAR2(255)    default NULL,
      aes_key    VARCHAR2(255)      default NULL,
      permission    VARCHAR2(3000)     default NULL,
      email    VARCHAR2(255)       default NULL,
      password    VARCHAR2(255)      default NULL,
      ras_public_key     VARCHAR2(255)  default NULL,
      constraint APP_INFO primary key (id)
    );
    
    drop sequence app_info_id;
    create sequence app_info_id
    increment by 1
    start with 1
    nomaxvalue
    nominvalue
    nocache;
    
    CREATE OR REPLACE TRIGGER addAppInfo BEFORE INSERT ON App_INFO FOR EACH ROW  
     BEGIN  
        SELECT app_info_id.nextval INTO :new.id  FROM dual;  
     END; 
    /
    ---2.unit信息
    drop table unit_info cascade constraints;
    create table UNIT_INFO
    (
      UNIT_ID        NUMBER(9)  not null,
      USERID          VARCHAR2(255)        default NULL,
      UNIT_NAME      VARCHAR2(128)        default NULL,
      UNIT_LINKMAN      VARCHAR2(64)    default NULL,
      ORGANIZATION_CODE        VARCHAR2(64)     default NULL,
      constraint UNIT_INFO primary key (UNIT_ID)
    );
    
    drop sequence unit_info_id;
    create sequence unit_info_id
    increment by 1
    start with 1
    nomaxvalue
    nominvalue
    nocache;
    
    CREATE OR REPLACE TRIGGER addUnitInfo BEFORE INSERT ON UNIT_INFO FOR EACH ROW  
     BEGIN  
        SELECT unit_info_id.nextval INTO :new.unit_id  FROM dual;  
     END; 
    /

     注意:存储过程也是一样的。

  • 相关阅读:
    使用NHibernate(1)--资料汇总
    mono上部署web程序初体验
    一次简单的ORM调研
    【设计模式】02-评判代码质量的标准?如何写出高质量代码?
    【设计模式】01-初识设计模式
    【ARTS】004-第四周(2020.06.15-2020.06.21)
    【leetcode】14-Longest Common Prefix
    【ARTS】003-第三周(2020.06.08-2020.06.14)
    【行成于思】04-读《如何超过大多数人》有感
    【leetcode】009-Palindrome Number
  • 原文地址:https://www.cnblogs.com/shawWey/p/8024095.html
Copyright © 2011-2022 走看看