Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SANDRO LOPES

Parar Procedure

Recommended Posts

SANDRO, encontrei isso no forum MySQL

Hi there, you really don't need RETURN - not in this proc. Consider writing it like this (in MS SQL I mean): if (not exists (select * from AlarmMaskTable where AllAlarms = _All and AlarmLevel = _lev and AlarmReason = _res and AlarmType = _typ and AlarmNumber = _num )) insert into AlarmMaskTable(AllAlarms,AlarmLevel,AlarmReason,AlarmType,AlarmNumber,AlarmLocation) values (_All,_lev,_res,_typ,_num,_loc) you see, you are inside an IF. Instead of leaving the proc in case the IF condition proves true, you can negate the condition with NOT. INstead of leaving, the proc just proceeds without doing any work. If you feel you really have to use something RETURN, consider using LEAVE (http://dev.mysql.com/doc/refman/5.0/en/leave-statement.html). LEAVE can be used to jump out of a labelled begin..end block. Consider this snip: CREATE PROCEDURE p_test_leave(p_flag int unsigned) main_block: BEGIN IF p_flag THEN SELECT 'leaving now, bye!'; LEAVE main_block; END IF; SELECT 'Ok'; END; But you really don't need it in your case. I think you can rewrite it like this: CREATE PROCEDURE ALV_Mask( _num bigint, _lev int, _res int, _typ int, _All int, _loc tinyint, _flg tinyint ) if (_flg=0) if not exists ( select * from AlarmMaskTable where AllAlarms = _All and AlarmLevel = _lev and AlarmReason = _res and AlarmType = _typ and AlarmNumber = _num ) then insert into AlarmMaskTable( AllAlarms , AlarmLevel , AlarmReason , AlarmType , AlarmNumber , AlarmLocation ) values (_All,_lev,_res,_typ,_num,_loc) ; end if; elseif(_flg=1)then select AlarmNumber , AlarmType , AlarmLevel , AlarmReason , AllAlarms , AlarmLocation from AlarmMaskTable order by AlarmNumber ; elseif(_flg=2)then delete from AlarmMaskTable where AlarmNumber = _num and AlarmType = _typ and AlarmLevel = _lev and AlarmReason = _res and AllAlarms = _all and AlarmLocation = _loc ; end if;

fonte: http://forums.mysql.com/read.php?60,83252,83313

Compartilhar este post


Link para o post
Compartilhar em outros sites

poxa to com um problemasso para criar uma trigger no mysql

ela eh bem simples soih necessita verificar se o o ip q esta para ser inserido não é o ultimo

 

DELIMITER$$

create trigger verificaIP BEFORE INSERT ON contador

FOR EACH ROW

BEGIN

 

DECLARE ultimo_ip varchar(15);

DECLARE ultimo_id int;

 

select MAX(id) into ultimo_id from contador;

select ip into ultimo_ip from contador where id = ultimo_id;

 

IF (NEW.ip = ultimo_ip) THEN

//aki eh o problema

END IF;

 

END;$$

DELIMITER;

[code=auto:0]

 

então eu nao consigo criar a trigger com leave pois somente o leave; da erro e eu naum estou dentro de nenhum loop e coisas do genero e naum quero soh sair do if mas sim não inserir nada pois o ip ja foi inserido

 

alguem sabe como resolver??

 

 

Muito Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é axo q terei que fazer com uma sp mas o correto seria em uma trigger

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.