2012-03-22 5 views
0

PostgreSQL 8.4에서이 트리거를 생성하는 데 문제가 있습니다.PostgreSQL 트리거 예외

CREATE OR REPLACE FUNCTION tbi_Usuarios() RETURNS TRIGGER AS $tbi_Usuarios$ 
    BEGIN 
     IF trim(both ' ' from NEW.Nombre_usuario) = '' OR NEW.Nombre_usuario IS NULL THEN 
      RAISE EXCEPTION 'Debes ingresar un nombre de usuario.'; 
     END IF; 

    IF NEW.Password = '' OR NEW.Password IS NULL THEN 
     RAISE EXCEPTION 'Debes ingresar una contraseña correctamente'; 
    ELSE 
     NEW.Password := md5(NEW.Password); 
    END IF; 

    IF Fecha_registro IS NULL THEN 
     NEW.Fecha_registro := current_timestamp; 
    END IF; 

    RETURN NEW; 
END; 
$tbi_Usuarios$ LANGUAGE plpgsql; 

DROP TRIGGER IF EXISTS tr_tbi_Usuarios ON "Usuarios"; 
CREATE TRIGGER tr_tbi_Usuarios BEFORE INSERT ON "Usuarios" 
FOR EACH ROW EXECUTE PROCEDURE tbi_Usuarios(); 

건은 내가 데이터베이스에 행을 삽입하려고 할 때, 다음과 같은 오류가 나타납니다, 그 :

"el registro <<new>> no tiene un campo <<nombre_usuario>>" 

또는 영어로 :

"the table <<new>> doesn't have a column <<nombre_usuario>>" 

그러나에 내 데이터베이스, 난 정말 열 Nombre_usuario, Password, Fecha_registro가 존재 해요!

아무도 도와 줄 수 있습니까?

답변

2

대문자 이름을 사용했을 가능성이 가장 높습니다. 나는 그것들을 사용하지 말라는 충고에 질려하지 않습니다.

당신은 아마

"Nombre_usuario" 

가 혼합 된 경우 맞춤법을 보존 따옴표 ( "")로 묶인라는 이름의 컬럼을 가지고있다.
그러나 당신의 트리거 기능에 당신은 쓰기 :

NEW.Nombre_usuario 

따옴표없이. 따옴표로 묶지 않은 식별자는 소문자로 변환됩니다.

NEW.nombre_usuario 

아니라 : 그래서이 동일하다

NEW."Nombre_usuario" 

항상 따옴표 혼합 된 경우 식별자. 또는 (훨씬 더) 독점적으로 소문자 식별자를 사용하여 문제를 해결할 수 있습니다.

설명서의 "Identifiers and Key Words" 장을 읽는 것으로 시작하십시오.

+0

고마워요! 그것은 효과가있다! – KGs