2017-04-25 1 views
0

누구나 텍스트 상자에서 사용할 수있는 좋은 트리거를 제안 할 수 있습니까? 텍스트 상자에서 사용하려는 작업은 사용자가 텍스트 상자의 값을 변경하면 데이터베이스 테이블의 해당 값을 커밋으로 업데이트하는 프로 시저를 호출하는 것입니다. 그러나 사용자가 값을 변경하고 Enter 키를 누르면 다음 항목으로 이동해야 DB를 업데이트합니다. KEY-NEXT-ITEM 트리거에서 제대로 작동합니다. 그러나 한 가지 문제는 사용자가 fld에서 값을 변경하지만 탭을 누르거나 입력하지 않고 직접 F10을 눌러 커밋한다고 말합니다. 입력란 (예 : KEY-NEXT-ITEM)의 트리거가 실행되지 않습니다. POST-TEXT-ITEM을 시도했지만 COMMIT 또는 NEXT_ITEM 내장 기능을 사용할 수 없습니다. 사용자가 항목을 종료하고 양식의 다음 항목으로 이동하는 순간 트리거가 실행되기를 원합니다.포스트 텍스트 항목이 커밋을받을 수 없습니다.

답변

1

WHEN-VALIDATE-ITEM 트리거를 사용하십시오. 이 트리거는 기본적으로 사용자가 입력 한 값의 유효성을 검사하기위한 것입니다. 양식이 결정될 때마다 사용자가 필드 값을 마칠 때마다 - 사용자가 필드를 떠날 때, 사용자가 커밋을 누를 때마다 발생합니다.

불행히도이 트리거에서는 COMMIT_FORM을 사용할 수 없습니다. 양식은 트랜잭션 트리거에서만 데이터베이스를 직접 변경하는 것이 좋습니다. ... 많이 감사

CREATE OR REPLACE PROCEDURE do_somethning (some_id NUMBER, some_value VARCHAR2) AS 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    UPDATE some_table SET some_column = some_value 
    WHERE table_id = some_id; 
    COMMIT; 
END do_somethning; 

이 행해져 Yout WHEN-VALIDATE-ITEM 트리거가 좋은 생각이

BEGIN 
    -- probably do some validations 
    ... 
    -- call your procedure 
    do_something(:some_block.id, :some_block.your_field); 
END; 
+0

처럼 될 수 있습니다, 커밋 데이터베이스 절차는 자율 트랜잭션에서 실행하기와 데이터베이스 변경을 구현하려면 참고 : "PRAGMA AUTONOMOUS_TRANSACTION;" 그것은 나를 준 ORA-00060 교착 상태가 을 발견했으나 제거했을 때 잘 처리되었습니다. 다시 고맙습니다 –

+0

아마도 폼에서 선택한 것과 같은 데이터베이스 레코드를 변경하고있을 것입니다. 이것이 바람직한 행동입니까? –

+0

예, 이것은 내가 원하는 것입니다 –

관련 문제