Fórum Ajuda para criação de uma SP #58970

14/10/2007

0

Tô querendo criar uma SP assim:
Tenho uma tabela chamada ´LANCAMENTO´ que esse campo ´GRUPO´ e tambem esse campo ´ITEM´quero que quando o usuário grave um registro ele va de modo sequencial 1 2 3..., só que tem um detalhe, quero que o campo ´ITEM´ seja sequencial começando de 1(um) apartir de cada número de ´GRUPO´ digitado pelo usuário. Exemplo:

GRUPO 1 ITEM 1
GRUPO 1 ITEM 2
GRUPO 1 ITEM 3

GRUPO 2 ITEM 1
GRUPO 2 ITEM 2
GRUPO 2 ITEM 3

Assim sucessivamente. A cada novo grupo digitado o número ITEM volte para a posição 1.

Deu pra entender? Num sei se fica melhor como uma SP ou uma Triggers.


Jpauloss

Jpauloss

Responder

Posts

14/10/2007

Jpauloss

Dados da tabela em questão
/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR ID_LANCAMENTO_PROJETO;

CREATE TABLE LANCAMENTO_PROJETO (
    ID_LANCAMENTO_PROJETO  INTEGER NOT NULL,
    COD_PROJETO            VARCHAR(6) NOT NULL,
    COD_ORDENADO_M         VARCHAR(20) NOT NULL,
    COD_GRUPO_FK           INTEGER NOT NULL,
    ITEM                   INTEGER,
    QUANTIDADE_M           VARCHAR(20),
    TOTAL                  NUMERIC(15,2)
);




/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE LANCAMENTO_PROJETO ADD CONSTRAINT PK_LANCAMENTO_PROJETO PRIMARY KEY (ID_LANCAMENTO_PROJETO);


/******************************************************************************/
/****                             Foreign Keys                             ****/
/******************************************************************************/

ALTER TABLE LANCAMENTO_PROJETO ADD CONSTRAINT FK_LANCAMENTO_PROJETO_1 FOREIGN KEY (COD_PROJETO) REFERENCES PROJETO (COD_PROJETO) ON DELETE CASCADE;
ALTER TABLE LANCAMENTO_PROJETO ADD CONSTRAINT FK_LANCAMENTO_PROJETO_2 FOREIGN KEY (COD_ORDENADO_M) REFERENCES MATERIAL (COD_ORDENADO);
ALTER TABLE LANCAMENTO_PROJETO ADD CONSTRAINT FK_LANCAMENTO_PROJETO_3 FOREIGN KEY (COD_GRUPO_FK) REFERENCES GRUPO (ID_GRUPO) ON DELETE CASCADE;


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/


SET TERM ^ ;


/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: LANCAMENTO_PROJETO_BI */
CREATE TRIGGER LANCAMENTO_PROJETO_BI FOR LANCAMENTO_PROJETO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID_LANCAMENTO_PROJETO IS NULL) THEN
    NEW.ID_LANCAMENTO_PROJETO = GEN_ID(ID_LANCAMENTO_PROJETO,1);
END
^


SET TERM ; ^



/******************************************************************************/
/****                              Privileges                              ****/
/******************************************************************************/



Responder

Gostei + 0

14/10/2007

Marco Salles

olhe pauloss , o que segue abaixo é apenas uma idéia de como fazer
confesso que funciona , mas voce deve adaptar as suas nexessidades

CREATE PROCEDURE LANCAMENTOS_PROJETOS_INS ( ID INTEGER, GRUPO INTEGER, ITEM INTEGER) RETURNS ( MAXIMO INTEGER) AS begin /* Procedure Text */ select max(item) from lancamentos_projetos where ( grupo = :grupo) into :maximo; if (maximo > 0) then begin maximo = maximo+1; insert into lancamentos_projetos ( id, grupo, item) values ( :id, :grupo, :maximo); end else insert into lancamentos_projetos ( id, grupo, item) values ( :id, :grupo, :item); end^


Com voce pode notar eu simplefiquei os seus campos... Fiz um exemplo
com apenas tres campos..

o Unico detalhe é que ao chamar a StoredProcedure , no meu exemplo , [b:1803bb8fd6]o Valor passado para o Parametro Grupo deve ser sempre UM[/b:1803bb8fd6]
[u:1803bb8fd6][color=blue:1803bb8fd6]E a Stored Procedure que vai alterar este valor para o Maximo+1[/color:1803bb8fd6][/u:1803bb8fd6]

boa sorte...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar