Oracle - ELSE - IF ORACLE

 
Vista:

ELSE - IF ORACLE

Publicado por Ivan (7 intervenciones) el 15/11/2005 12:43:11
Hola a todos:

CREATE OR REPLACE TRIGGER QSMTOWN.T_SINCRO_USUARIOS
BEFORE UPDATE OR INSERT ON USUARIS_GEN
FOR EACH ROW
DECLARE
ID_USUARI NUMBER;
LOGIN_U VARCHAR2(50);
BEGIN
SELECT USERNAME INTO LOGIN_U FROM SEG_USUARIOS WHERE USERNAME = :NEW.LOGIN;
IF(LOGIN_U IS NOT NULL) then

:NEW.OBSERVACIONS := 'EXISTE';
if(:NEW.DESACTIVAT = 1) then
UPDATE SEG_USUARIOS SET FECHA_BAJA = TO_CHAR(sysdate,'DD/MM/YYYY')
WHERE USERNAME = :NEW.LOGIN;
else
UPDATE SEG_USUARIOS SET FECHA_BAJA = NULL
WHERE USERNAME = :NEW.LOGIN;
end if;

ELSE
:NEW.OBSERVACIONS := 'NO EXISTE';

end if;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END T_SINCRO_USUARIOS;
/

Este codigo es simple . Pero no funciona una cosa. Cuando el LOGIN_U existe , el condicional IF lo acoge perfectamente ...pero cuando el SELECT USERNAME INTO LOGIN_U no encuentra nada , el condicional no lo hace pasar por el ELSE. No lo entiendo...si alguie me puede ayudar.

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ELSE - IF ORACLE

Publicado por Jesús de Diego (31 intervenciones) el 15/11/2005 17:31:20
¿Qué valor adquiere la variable cuando no hay resultados? ¿puedes capturar su valor en ese caso?

Un saludo

Jesús de Diego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ELSE - IF ORACLE

Publicado por JSL (186 intervenciones) el 15/11/2005 19:25:15
El select no tiene EXCEPTIONS por lo que debes simpre de considerarla y esta tomando el EXCEPTION del final ... pruebalo con esto ...
Revisa que al SELECT lo puse comoi bloque PLSQL
(BEGIN SELECT ; EXCEPTION ... END;) Para el caso del UPDATE no es necesario manejo de EXCEPTION de NO_DATA_FOUND ...

CREATE OR REPLACE TRIGGER QSMTOWN.T_SINCRO_USUARIOS
BEFORE UPDATE OR INSERT ON USUARIS_GEN
FOR EACH ROW
DECLARE
ID_USUARI NUMBER;
LOGIN_U VARCHAR2(50);
BEGIN

BEGIN
SELECT USERNAME INTO LOGIN_U FROM SEG_USUARIOS WHERE USERNAME = :NEW.LOGIN;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;

IF(LOGIN_U IS NOT NULL) then

:NEW.OBSERVACIONS := 'EXISTE';
if(:NEW.DESACTIVAT = 1) then
UPDATE SEG_USUARIOS SET FECHA_BAJA = TO_CHAR(sysdate,'DD/MM/YYYY')
WHERE USERNAME = :NEW.LOGIN;
else
UPDATE SEG_USUARIOS SET FECHA_BAJA = NULL
WHERE USERNAME = :NEW.LOGIN;
end if;

ELSE
:NEW.OBSERVACIONS := 'NO EXISTE';

end if;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END T_SINCRO_USUARIOS;
/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ELSE - IF ORACLE

Publicado por Leonardo (91 intervenciones) el 16/11/2005 14:23:38
CREATE OR REPLACE TRIGGER QSMTOWN.T_SINCRO_USUARIOS
BEFORE UPDATE OR INSERT ON USUARIS_GEN
FOR EACH ROW
DECLARE
ID_USUARI NUMBER;
LOGIN_U VARCHAR2(50);
existe_usuario number;
BEGIN
begin
select count()
into existe_usuario
from seg_usuarios where username = :new.login;
end;
if existe_usuario > 0 then
:NEW.OBSERVACIONS := 'EXISTE';
if(:NEW.DESACTIVAT = 1) then
UPDATE SEG_USUARIOS SET FECHA_BAJA = TO_CHAR(sysdate,'DD/MM/YYYY')
WHERE USERNAME = :NEW.LOGIN;
else
UPDATE SEG_USUARIOS SET FECHA_BAJA = NULL
WHERE USERNAME = :NEW.LOGIN;
end if;
ELSE
:NEW.OBSERVACIONS := 'NO EXISTE';
end if;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END T_SINCRO_USUARIOS;
/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar