CREATE TABLE FUNCIONARIO (
       ID_FUNCIONARIO       INTEGER NOT NULL,
       NOM_FUNCIONARIO      VARCHAR(80)
);

CREATE UNIQUE INDEX XPKFUNCIONARIO ON FUNCIONARIO
(
       ID_FUNCIONARIO
);


ALTER TABLE FUNCIONARIO
       ADD PRIMARY KEY (ID_FUNCIONARIO);


CREATE TABLE FUNCIONARIO_EXECUCAO (
       ID_FUNCIONARIO       INTEGER NOT NULL,
       ID_ORDEM_SERVICO     INTEGER NOT NULL,
       DTA_HOR_EXECUCAO     DATE NOT NULL,
       DSC_SERVICO_EXECUTADO VARCHAR(4000)
);

CREATE UNIQUE INDEX XPKFUNCIONARIO_EXECUCAO ON FUNCIONARIO_EXECUCAO
(
       ID_FUNCIONARIO,
       ID_ORDEM_SERVICO,
       DTA_HOR_EXECUCAO
);


ALTER TABLE FUNCIONARIO_EXECUCAO
       ADD PRIMARY KEY (ID_FUNCIONARIO, ID_ORDEM_SERVICO,DTA_HOR_EXECUCAO);


CREATE TABLE ORDEM_SERVICO (
       ID_ORDEM_SERVICO     INTEGER NOT NULL,
       DSC_SERVICO          VARCHAR(4000),
       ID_SITUACAO          CHAR(1),
       DTA_ABERTURA         DATE,
       DTA_FECHAMENTO       DATE
);

CREATE UNIQUE INDEX XPKORDEM_SERVICO ON ORDEM_SERVICO
(
       ID_ORDEM_SERVICO
);


ALTER TABLE ORDEM_SERVICO
       ADD PRIMARY KEY (ID_ORDEM_SERVICO);


ALTER TABLE FUNCIONARIO_EXECUCAO
       ADD FOREIGN KEY (ID_ORDEM_SERVICO)
                             REFERENCES ORDEM_SERVICO;


ALTER TABLE FUNCIONARIO_EXECUCAO
       ADD FOREIGN KEY (ID_FUNCIONARIO)
                             REFERENCES FUNCIONARIO;

CREATE GENERATOR GEN_FUNCIONARIO_ID;

SET TERM ^ ;

CREATE TRIGGER FUNCIONARIO_BI FOR FUNCIONARIO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID_FUNCIONARIO IS NULL) THEN
    NEW.ID_FUNCIONARIO = GEN_ID(GEN_FUNCIONARIO_ID,1);
END
^

SET TERM ; ^


CREATE GENERATOR GEN_ORDEM_SERVICO_ID;

SET TERM ^ ;

CREATE TRIGGER ORDEM_SERVICO_BI FOR ORDEM_SERVICO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID_ORDEM_SERVICO IS NULL) THEN
    NEW.ID_ORDEM_SERVICO = GEN_ID(GEN_ORDEM_SERVICO_ID,1);
END
^

SET TERM ; ^




--INSERINDO DADOS
INSERT INTO FUNCIONARIO (NOM_FUNCIONARIO) VALUES (FUNCIONARIO 1);
INSERT INTO FUNCIONARIO (NOM_FUNCIONARIO) VALUES (FUNCIONARIO 2);
INSERT INTO FUNCIONARIO (NOM_FUNCIONARIO) VALUES (FUNCIONARIO 3);
INSERT INTO FUNCIONARIO (NOM_FUNCIONARIO) VALUES (FUNCIONARIO 4);

INSERT INTO ORDEM_SERVICO (DSC_SERVICO, ID_SITUACAO, DTA_ABERTURA)
VALUES ('SERVIO 1','A','NOW');
INSERT INTO ORDEM_SERVICO (DSC_SERVICO, ID_SITUACAO, DTA_ABERTURA)
VALUES ('SERVIO 2','A','NOW');
INSERT INTO ORDEM_SERVICO (DSC_SERVICO, ID_SITUACAO, DTA_ABERTURA)
VALUES ('SERVIO 3','A','NOW');
INSERT INTO ORDEM_SERVICO (DSC_SERVICO, ID_SITUACAO, DTA_ABERTURA)
VALUES ('SERVIO 4','A','NOW');
