insert condicional

15/04/2012

0

Bom dia pessoal !

Tenho uma tabela de cadastrar equipamentos (EQU_ID) em manutenção mas um equipamento so pode ser cadastrado novamente se o status dele (STA_ID) for igual de 1 (1 é liberado)


alguém pode me ajudar ??
estou usando a stored procedure abaixo mas do jeito que esta ai abaixo ele inserir independente do status (STA_ID) do equipamento (EQU_ID) e o que preciso que so pode ser inserido se o equipamento não estiver mais na oficina ou seja STA_ID = 1

procedure [dbo].[INSERIR_MANUTENCAO]
@OFICINA VARCHAR(10)
,@OS VARCHAR (10)
,@STATUS INT
,@LOCAL VARCHAR (20)
,@EQUIPAMENTO_ID INT
,@DESCRICAO VARCHAR (100)
,@OBSERVACAO VARCHAR (500)
,@DT_INICIO DATETIME
,@DT_PREVISAO DATETIME
,@TIPO_SERVICO INT
,@TIPO_PREVENTIVA INT


AS
BEGIN

INSERT INTO MANUTENCOES (MAN_OFICINA,MAN_OS ,STA_ID ,MAN_LOCAL ,EQU_ID,MAN_DESCRICAO ,MAN_OBSERVACAO ,MAN_DT_INICIO,MAN_DT_PREVISAO,TIPO_SERVICO_ID,TIPO_PREV_ID)
VALUES (@OFICINA,@OS,@STATUS,@LOCAL,@EQUIPAMENTO_ID,@DESCRICAO,@OBSERVACAO,@DT_INICIO,@
DT_PREVISAO,@TIPO_SERVICO,@TIPO_PREVENTIVA)

END
Rafael

Rafael

Responder

Posts

15/04/2012

Joel Rodrigues

Faça algo desse tipo, adaptando:

DECLARE
	@LIBERADO INT
SELECT @LIBERADO = (SELECT STA_ID FROM TABELA WHERE FILTRO)

IF @LIBERADO = 1
	INSERT...


Boa sorte.
Responder

15/04/2012

Rafael

Obrigado Jair por responder!

mas o filtro no caso seria o EUQ_ID = @EQUIPAMENTO_ID ?

tentei todas possibilidade que eu imaginei mas da o seguinte erro

A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.

tentei da seguinte forma



procedure [dbo].[INSERIR_MANUTENCAO]
@OFICINA VARCHAR(10)
,@OS VARCHAR (10)
,@STATUS INT
,@LOCAL VARCHAR (20)
,@EQUIPAMENTO_ID INT
,@DESCRICAO VARCHAR (100)
,@OBSERVACAO VARCHAR (500)
,@DT_INICIO DATETIME
,@DT_PREVISAO DATETIME
,@TIPO_SERVICO INT
,@TIPO_PREVENTIVA INT
,@LIBERADO INT


AS
BEGIN

SELECT @LIBERADO = (SELECT STA_ID FROM MANUTENCOES WHERE EQU_ID = @EQUIPAMENTO)

IF @LIBERADO = 3

INSERT INTO MANUTENCOES (MAN_OFICINA,MAN_OS ,STA_ID ,MAN_LOCAL ,EQU_ID,MAN_DESCRICAO ,MAN_OBSERVACAO ,MAN_DT_INICIO,MAN_DT_PREVISAO,TIPO_SERVICO_ID,TIPO_PREV_ID)
VALUES (@OFICINA,@OS,@STATUS,@LOCAL,@EQUIPAMENTO_ID,@DESCRICAO,@OBSERVACAO,@DT_INICIO,@DT_PREVISAO,@TIPO_SERVICO,@TIPO_PREVENTIVA)

END
Responder

16/04/2012

Joel Rodrigues

Bem, acho que a lógica é essa mesmo, porém você precisa fazer um filtro que retorne apenas um registro. Por exemplo, você quer saber o status de um equipamento, então o resultado da consulta deve ser o STA_ID do equipamento. Não posso nem detalhar muito, pois não conheço a estrutura das tabelas. Mas é por aí...
Responder

21/04/2012

Emerson Nascimento

você grava o status do equipamento na tabela de manutenções?
não deveria ficar gravado no cadastro do equipamento?

deveria ser algo assim:

equi
---------
equip_id
descricao
status
[demais campos]

manutencao
-----------
manutencao_id
oficina_id
os_id
equip_id
dataentrada
datasaida

dessa forma, você altera o cadastro do equipamento quando ele entrar em manutenção quando ele sair dela.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar