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.
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
Curtir tópico
+ 0
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
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...
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
Clique aqui para fazer login e interagir na Comunidade :)