방금 PL/pgSQL 트리거 기능을 작성하기 시작했습니다. 나는 Student와 Result라고 불리는 몇 개의 테이블을 가지고있다. 다음 칼럼을 가진 학생. ID, 이름, 제목, 마크 (ID는 기본 키)과 결과 테이블이 ID, 하나 개의 레코드가 학생 테이블에 추가 될 때마다PostgreSQL 트리거 기능의 기본 키 값에 액세스 할 수 없습니다.
가, 내가 원하는 상태와 같은 두 개의 열을 가지고있다 학생 표의 표시를 확인하여 결과표를 업데이트하려면 입력 한 부호가 50보다 큰 경우 하나의 레코드가 ID 및 상태 = 통과로 결과 테이블에 삽입되어야하며 50보다 작 으면 상태가 실패합니다 . 제가 I 하드 차 키 값을 부호화 한 이후 예상로 활동이 기능이 트리거에 의해
CREATE OR REPLACE FUNCTION "UpdateResult"() RETURNS trigger AS $BODY$
BEGIN
IF NEW.mark < 50 THEN
INSERT INTO "Result" SELECT 92,'fail';
RETURN NEW;
ELSE
INSERT INTO "Result" SELECT 92,'pass';
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE STRICT SECURITY DEFINER
COST 100;
ALTER FUNCTION "UpdateResult"() OWNER TO postgres;
CREATE TRIGGER "Result"
AFTER INSERT
ON "Student"
FOR EACH ROW
EXECUTE PROCEDURE "UpdateResult"();
을 달성하기 위해 다음의 트리거 기능을 갖는다. 내가 "결과"에 다음
INSERT 같은 트리거 기능 내부의 SQL을 수정하는 경우 그러나 NEW.ID을 선택, '실패'; (또는) INSERT INTO "결과"SELECT NEW.ID, 'pass';
그것은
> ***Record "new" has no field "id" Context : PL/pgSQL function
> "UpdateResult" line 3 at SQL statement***
같은 오류를 던지고는 새로운 변수가 아니라 기본 키 값에서 비 기본 키 값의 값을 가질 수 있습니다 의미합니다. 어느 누구도 PL/pgSQL에 제한이 있는지 말해 줄 수 있습니까? 아니면 잘못하고 있습니까?
은 "ID"필드의 총액을 확인 - 그것은 수도에 있다면 당신은 (그것을 인용하여) 그 같은 방법을 사용해야합니다 : INSERT 결과 "INTO "새 선택."ID ", NEW.name; –
Milen. 안녕하세요, 대문자입니다. 따옴표를 추가 한 후 작동하고 있습니다. 이유는 무엇입니까? – Murugesh
[식별자 및 키워드] (http://www.postgresql.org/docs/) current/static/sql-syntax-lexical.html # SQL-SYNTAX-IDENTIFIERS)에서 "quoted identifier"를 찾으십시오. –