Jump to content

[Resolvido] Dúvida sobre trigger


gongoland
 Share

Recommended Posts

Boa Noite pessoal, estou a fazer um projeto para uma cadeira de base de dados e estou com uma dúvida..

O meu trabalho é sobre uma firma de advogados e eu tenho uma tabela funcionários(onde engloba todos os funcionários) e depois tenho uma tabela advogados e outra func_administrativo e eu queria fazer um trigger que ao adicionar dados na tabela funcionário, depois ia inserir dados ou na tabela advogado ou func_administrativo, consoante a escolha do utilizador, acham que é uma coisa impossível?

Link to comment
Share on other sites

Viva,

Sim, podes fazê-lo usando CREATE TRIGGER AFTER INSERT.

PS: Se nas tabelas advogados e func_administrativo usares um campo AutoNumber (não aconselho, recomendo usares o mesmo ID), atenção que depois do INSERT deves usar SCOPE_IDENTITY em vez de @@IDENTITY para obter o ID do registo inserido na tabela FUNCIONARIOS.

Outra abordagem seria criares duas views, uma para advogados, outra para funcionários administrativos, dependendo do tipo de utilizador.

Espero ter ajudado,

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

Viva,

Sim, podes fazê-lo usando CREATE TRIGGER AFTER INSERT.

PS: Se nas tabelas advogados e func_administrativo usares um campo AutoNumber (não aconselho, recomendo usares o mesmo ID), atenção que depois do INSERT deves usar SCOPE_IDENTITY em vez de @@IDENTITY para obter o ID do registo inserido na tabela FUNCIONARIOS.

Outra abordagem seria criares duas views, uma para advogados, outra para funcionários administrativos, dependendo do tipo de utilizador.

Espero ter ajudado,

Muito Obrigado pela ajuda 👍

Link to comment
Share on other sites

Depois diz se resultou ou não (para encerrar o tópico)

Já agora, se pudesse ajudar também na resolução deste procedimeto

CREATE PROCEDURE Processos

AS

DECLARE
@IDProcesso INT,
@IDCliente INT,
@IDFuncionario INT,
@NomeProcesso VARCHAR(100),
@DescricaoProcesso VARCHAR(200),
@ParecerProcesso VARCHAR(100),
@EstadoProcesso VARCHAR(20),
@DataProcesso DATE

DECLARE Cursor_Processo_Forward CURSOR
FORWARD_ONLY
FOR
SELECT ID_Processo,ID_Cliente,ID_Funcionario,Nome_Processo,Descricao_Processo,Parecer_Processo,Estado_Processo,Data_Processo FROM Processo ORDER BY ID_Processo
OPEN Cursor_Processo_Forward

WHILE @@FETCH_STATUS = 0
BEGIN
Insert Into Processo(ID_Processo,ID_Cliente,ID_Funcionario,Nome_Processo,Descricao_Processo,Parecer_Processo,Estado_Processo,Data_Processo)
	Values(@IDProcesso,@IDCliente,@IDFuncionario,@NomeProcesso,@DescricaoProcesso,@ParecerProcesso,@EstadoProcesso,@DataProcesso)

  FETCH NEXT FROM Cursor_Processo_Forward INTO @IDProcesso,@IDCliente,@IDFuncionario,@NomeProcesso,@DescricaoProcesso,@ParecerProcesso,@EstadoProcesso,@DataProcesso


END
CLOSE Cursor_Processo_Forward
DEALLOCATE Cursor_Processo_Forward

o objectivo era criar um procedimento com um cursor pelo meio, que inserisse um novo processo, o que falta aqui?

Edited by Rechousa
Formatação de código
Link to comment
Share on other sites

Olá,

Por norma, quando se trata de um problema novo, cria-se um tópico novo 😉

Falta-te fazer o primeiro FETCH dos dados.

OPEN Cursor_Processo_Forward

-- Falta esta linha:
FETCH NEXT FROM Cursor_Processo_Forward INTO @IDProcesso,@IDCliente,@IDFuncionario,@NomeProcesso,@DescricaoProcesso,@ParecerProcesso,@EstadoProcesso,@DataProcesso

WHILE @@FETCH_STATUS = 0

Mas uma coisa que não percebi... Estás a obter os dados da tabela PROCESSO, criar um cursor para voltar a inserir os mesmos dados na mesma tabela?

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

Olá,

Por norma, quando se trata de um problema novo, cria-se um tópico novo 😉

Falta-te fazer o primeiro FETCH dos dados.

OPEN Cursor_Processo_Forward

-- Falta esta linha:
FETCH NEXT FROM Cursor_Processo_Forward INTO @IDProcesso,@IDCliente,@IDFuncionario,@NomeProcesso,@DescricaoProcesso,@ParecerProcesso,@EstadoProcesso,@DataProcesso

WHILE @@FETCH_STATUS = 0

Mas uma coisa que não percebi... Estás a obter os dados da tabela PROCESSO, criar um cursor para voltar a inserir os mesmos dados na mesma tabela?

não quis estar a encher o forum com tópicos, peço desculpa 😕

pois se calhar ai é que estou a fazer mal, o objetivo activar o procedimento de forma a inserir um novo processo mas se calhar não estou a fazer da melhor forma..

Edited by gongoland
Link to comment
Share on other sites

O que pretendes fazer é ter uma stored procedure em que recebe alguns parâmetros e insere um novo registo na tabela PROCESSO?

Algo do género?:

CREATE PROCEDURE Processos
(
   @IDProcesso INT,
   @IDCliente INT,
   @IDFuncionario INT,
   @NomeProcesso VARCHAR(100),
   @DescricaoProcesso VARCHAR(200),
   @ParecerProcesso VARCHAR(100),
   @EstadoProcesso VARCHAR(20),
   @DataProcesso DATE
)
AS
BEGIN
   SET NOCOUNT ON;

   INSERT INTO Processo
   (
       --ID_Processo,
       ID_Cliente,
       ID_Funcionario,
       Nome_Processo,
       Descricao_Processo,
       Parecer_Processo,
       Estado_Processo,
       Data_Processo
   )
 VALUES
 (
     --@IDProcesso,
     @IDCliente,
     @IDFuncionario,
     @NomeProcesso,
     @DescricaoProcesso,
     @ParecerProcesso,
     @EstadoProcesso,
     @DataProcesso
 );

 SELECT SCOPE_IDENTITY() AS idProcesso;

END

Considerei o cenário do campo IDProcesso ser um auto number.

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

O que pretendes fazer é ter uma stored procedure em que recebe alguns parâmetros e insere um novo registo na tabela PROCESSO?

Algo do género?:

CREATE PROCEDURE Processos
(
@IDProcesso INT,
@IDCliente INT,
@IDFuncionario INT,
@NomeProcesso VARCHAR(100),
@DescricaoProcesso VARCHAR(200),
@ParecerProcesso VARCHAR(100),
@EstadoProcesso VARCHAR(20),
@DataProcesso DATE
)
AS
BEGIN
SET NOCOUNT ON;

INSERT INTO Processo
(
	--ID_Processo,
	ID_Cliente,
	ID_Funcionario,
	Nome_Processo,
	Descricao_Processo,
	Parecer_Processo,
	Estado_Processo,
	Data_Processo
)
 VALUES
 (
  --@IDProcesso,
  @IDCliente,
  @IDFuncionario,
  @NomeProcesso,
  @DescricaoProcesso,
  @ParecerProcesso,
  @EstadoProcesso,
  @DataProcesso
 );

 SELECT SCOPE_IDENTITY() AS idProcesso;

END

Considerei o cenário do campo IDProcesso ser um auto number.

é exatamente isto que queriam muito obrigado mais uma vez, pode fechar o topico 👍

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.