2011-10-26 4 views
0

나는 다음과 같은 트리거 만드는거야 업데이트되는 오류 언제든지 데이터를 제공한다 : 나는 그것을 만들 때오라클 트리거 만들었지 만

CREATE TRIGGER Trigger_UpdateTrainingDelivery 
    AFTER DELETE OR INSERT OR UPDATE OF STARTDATE 
    ON TPM_TRAININGPLAN 
    BEGIN 
     UPDATE TPM_PROJECTVERSION V 
     SET TRAININGDELIVERYSTART = (SELECT MIN(STARTDATE) FROM TPM_TRAININGPLAN WHERE PROJECTID=V.PROJECTID AND VERSIONID=V.VERSIONID AND TRAININGPLANTYPE='prescribed') 
    END; 

, 내가 경고를받을를 그것은 여전히 ​​어쨌든 그것을 만듭니다. TPM_TRAININGPLAN에서 행을 수정하면 오류가 발생합니다.

>[Error] Script lines: 12-12 ------------------------ 
ORA-04098: trigger 'TPMDBO.TRIGGER_UPDATETRAININGDELIVERY' is invalid and failed re-validation 
Script line 12, statement line 1, column 7 

트리거가 잘못 되었습니까? 트리거 자체에서 UPDATE 문을 실행할 수 있으며 올바르게 실행되므로 아무 문제가 없다고 생각하지 않습니다.

답변

4

.

USER_ERRORS을 쿼리하면 SQL * Plus에 액세스 할 필요없이 SQL * Plus가 SHOW ERRORS 명령과 함께 제공하는 것과 동일한 오류 정보가 표시됩니다.

SELECT line, position, text 
    FROM user_errors 
WHERE name = 'TRIGGER_UPDATETRAININGDELIVERY' 
ORDER BY sequence 
+0

그래, 확실히 그 버그입니다! 세미콜론을 넣으면 아쿠아 괴물이 나오는데 왜냐하면 내가 두 개의 다른 명령문을 실행하고 있다고 생각하고 유효하지 않은 명령문 오류가 발생하기 때문입니다. 나는 그것을 나의 트리거 문법과 실제 오류로 착각하고 세미콜론을 제거했다. Visual Studio로이 모든 것을 실행 시켰습니다 (언급 한 세미콜론으로). 이제는 완벽합니다. –

0

컴파일하는 동안보고 된 오류는 무엇입니까?

SQL> show errors trigger trigger_updatetrainingdelivery 
+0

불행하게도, 난 단지 .. –

+0

@MikeChristensen를 서버에 원격으로 액세스 할 수 있으며 SQLPLUS에 액세스 할 수없는 : 참고로, SQL은 * 플러스는 TNS 리스너 (당신이 액세스를 사용하는 어떤 같은 방법을 통해 원격 서버에 액세스 할 수 있습니다 그것). 저는 이것이 SQL * Plus를 사용하는 일반적인 방법이라고 말합니다. 컴퓨터에 Oracle Client를 설치하면 적어도 netca를 실행하거나 수동으로 tnsnames.ora를 편집 한 후에 작동합니다. – derobert

0

좋아요. 알아 냈습니다. 실제로 Aqua Data Studio의 버그입니다. 쿼리를 실행하는 데 사용하고 있습니다. 어떤 이유로 트리거에서 세미콜론을 올바르게 처리하지 못합니다. 나는이 버그를보고 할 것이다, 그러나 나는 해결 방법을 찾았어요 : 당신이 당신의 UPDATE 문장의 끝에 세미콜론 누락 것으로 보인다

File->Options->General 
Uncheck: ';' Statement separator 
관련 문제