开发者

What query creates a trigger to generate composite primary key with two fk?

I'm trying to write a command to create a trigger that generates the composite primary key. This pk is in turn based on two fk.

I'll write example tables to be more specific.

(Table I'm working on)

CREATE TABLE DB.MESSAGE (
  TEXT      CLOB         NOT NULL,
  SUBJECT   VARCHAR2(2000) NOT NULL,
  MSG_TYPE  NUMBER(1) NOT NULL,
  MAIL_ID NUMBER(10) NOT NULL
)
;

ALTER TABLE DB.MESSAGE ADD CONSTRAINT MSG_PK PRIMARY KEY ( MSG_TYPE, MAIL_ID ) ;

ALTER TABLE DB.MESSAGE ADD
(
    CONSTRAINT MESSAGE_TYPE_ID_FK
    FOREIGN KEY ( MSG_TYPE )
        REFERENCES DB.TYPES ( TYPE_ID )
);

ALTER TABLE DB.MESSAGE ADD
(
    CONSTRAINT MESSAGE_MAIL_FK
    FOREIGN KEY ( MAIL_ID )
        REFERENCES DB.EML_MAIL ( MAILTO_ID )
);

(Referenced tables)

CREATE TABLE DB.TYPES (
  TYPE_ID    NUMBER(13)        NOT NULL, 
  NAME       VARCHAR2(10)       NOT NULL
)
;

CREATE TABLE DB.MAIL (
  MAIL_ID    NUMBER(10)        NOT NULL, 
  MAIL       VARCHAR2(350)       NOT NULL
)
;

My query so far

create or replace
TRIGGER DB.TRG_MESSAGE_ID
BEFORE  INSERT ON DB.MESSAGE

FOR EACH ROW
BEGIN
 IF INSERTING THEN
  IF :NEW."MSG_ID" IS NULL THEN
    SELECT DB.TYPES.TYPE_ID ??????
    INTO :NEW."MSG_ID" FROM dual;
  END IF;
 END IF;
END;

EDIT: So the thinking behind this question was that there would be a separa开发者_运维百科ted column with a concatenations of both keys that compose the composite key. A friend told me this is wrong, you just put both fields as pk and that's that. Is this true?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜