連續創建多個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; 
/

 注意:存儲過程也是一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM