Array
(
)

insert condicional

Rafael
   - 15 abr 2012

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

Joel Rodrigues
   - 15 abr 2012

Faça algo desse tipo, adaptando:

#Código

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

IF @LIBERADO = 1
	INSERT...


Boa sorte.

Rafael
   - 15 abr 2012

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

Joel Rodrigues
   - 16 abr 2012

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í...

Emerson
   - 21 abr 2012

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.