Oracle从多个表中添加记录

时间:2016-09-19 02:07:59

标签: sql oracle rdbms

我的目标是从许多不同的表构建一个主序列号表,每个序列号必须是唯一的。

 CREATE TABLE  "TBL_SERIAL_NUMBER_MASTER" 
   (    "INTERNAL_RECORD_ID" VARCHAR2(60) NOT NULL ENABLE, 
    "ASSET_ID" VARCHAR2(60), 
    "SERIAL_NUMBER" VARCHAR2(1000) NOT NULL ENABLE, 
    "VALID" VARCHAR2(60) DEFAULT 'Valid', 
    "HOST_NAME" VARCHAR2(255), 
     CHECK ( valid IN ('Invalid', 'Valid')) ENABLE, 
     CHECK ( valid IN ('Invalid', 'Valid')) ENABLE, 
     CHECK ( valid IN ('Invalid', 'Valid')) ENABLE, 
     CONSTRAINT "TBL_SERIAL_NUMBER_MASTER_CON" PRIMARY KEY ("SERIAL_NUMBER") ENABLE
   ) ;


CREATE OR REPLACE TRIGGER  "TBL_SERIAL_NUMBER_MASTER_INTER" BEFORE
  INSERT
    ON tbl_serial_number_master FOR EACH ROW  WHEN (
      NEW.internal_record_id IS NULL
    ) BEGIN :NEW.internal_record_id := tbl_serial_number_master_inter.NEXTVAL;
END;
/
ALTER TRIGGER  "TBL_SERIAL_NUMBER_MASTER_INTER" ENABLE;

我已使用一个表更新了SERIAL_NUMBER字段。现在我想从另一个表中添加更多序列号。这些其他表有重复和空值序列号。您能否建议我如何创建查询以添加已经不在TBL_SERIAL_NUMBER_MASTER中的唯一序列号。

请假设其他表格的以下字段。

TABLE_SOURCE_B

  1. ID:-PK
  2. SERIAL_NUMBER
  3. 列表项
  4. 名称

1 个答案:

答案 0 :(得分:0)

在主表中,'Internal_Record_Id'具有Not Null约束。所以我将Source表的ID字段的值插入'internal_record_id'。 请尝试以下查询。

 INSERT INTO 
    TBL_SERIAL_NUMBER_MASTER (INTERNAL_RECORD_ID,SERIAL_NUMBER) 
 SELECT  ID,SERIAL_NUMBER 
    FROM TABLE_SOURCE_B B 
       WHERE B.SERIAL_NUMBER NOT IN(SELECT SERIAL_NUMBER 
                                              FROM TBL_SERIAL_NUMBER_MASTER);

希望它有所帮助!