2010-04-09 2 views
0

"N"이외의 다른 것으로 설정되지 않도록 보장 할 수 있어야하는 열이 있습니다. 트리거가이 솔루션을위한 최적의 솔루션이라고 생각합니다. 열이 "N"이 아닌 다른 값으로 설정 될 때마다 그 열을 "N"으로 다시 설정하는 방법을 찾아야합니다.오라클 트리거 값을 유지하려면

모든 포인터?

EDIT : 잠재적으로 Y로 변경하는 응용 프로그램이 내 제어 외부에 있기 때문에 제약 조건을 적용하고 싶지 않을 것입니다. Y로 설정하면 오류가 발생하지 않기를 바랍니다. fanfare없이 수동적으로 그것을 N으로 되돌리고 싶습니다.

답변

1

아마도 이와 비슷한 것일 수 있습니다. 나는 그것이 나쁜 생각 인 것을 안다. 그리고 그것은 당신을 붙잡 으러 되돌아 올 것이다. 또한, 나는 몇 년에 오라클을하지 않은, 그러나 이것은 당신이 시작할 수 있어야합니다

create or replace trigger trg_special_col before update on AnnoyingTable 
for each row 
begin 
    :new.special_col := 'N'; 
end; 
+1

삽입하기 전에 유사 –

+0

나를 믿어 라, 내가하고 싶은 일을하는 유일한 방법이다. 내 사무실에서 일하는 방식은 괜찮을거야. 감사. –

+0

@Gary - 내 답변을 더 자세히 작성해 주셔서 감사합니다. – MJB

2

트리거 대신 열 제한 조건을 사용하는 것이 좋습니다. 추적 및 디버그가 더 쉽습니다. 하지만 N 또는 null 이외의 다른 값으로 설정할 수 없다는 것을 의미한다고 가정합니다. 그렇지 않다면 값이 항상 'N'이면 저장하는 것이 왜 싫은가요?

+0

응용 프로그램은 우리의 통제 불능이며 우리가 _ALWAYS_하려는 우리의 목적을 위해 우리는 데이터베이스를 통해 워크 플로우를 사용자 정의 할 수 있습니다 N 일 수도 있고, 그 외에는 아무것도 없을 수도 있습니다. –

+1

확인. 내 판단에 반해서,하지만 레코드를 업데이트하거나 삽입 할 때마다 new.AnnoyingColumn = 'N'을 설정하는 트리거를 수행 할 수 있다고 생각합니다. 정말로 이상하게 들린다. 그리고 나는 초래할 것 인 어떤 종류의 말썽을 상상할 수 없다. 어떤 어려움을 겪고 있습니까? – MJB

+0

오랜 이야기입니다. 기본적으로 우리가 사용하는 소프트웨어의 거대한 획기적인 부분이며, 실행하는 코드에 대해 전혀 통제력이 없습니다. 우리 회사에서는이 특정 열을 Y로 설정하지 않기를 원하지만 응용 프로그램에서이 옵션을 제공하지 않으므로이 방법을 시행해야합니다. 나는 불행히도 그것을하는 방아쇠에 도착했다, 나의 질문은 지금 문제에 많은 경험이 없기 때문에 _ 방아쇠를 당기는 방아쇠를 당기는 방법이다. –

0

가장 쉬운 방법은 (보기를 만들 수있는 옵션이 열려있는 경우) 테이블에서보기를 제공하고보기에서 정적 값인 "N"으로 문제의 열 값을 설정하는 것입니다. 즉 뷰에 값을 유지하십시오.

+0

내 컨트롤 외부에있는 응용 프로그램은이 열 값을 기반으로 결정하므로 응용 프로그램에서 해당보기를 사용할 수 없기 때문에 항상 'N'으로 설정된보기를 작성하면 좋지 않습니다. –

+0

보기의 이름을 테이블의 이름으로 지정하고 테이블의 이름을 다른 것으로 변경하는 것이 좋습니다. 앱이 테이블 아래 또는보기 아래의보기를보고 있는지 여부를 알 필요가 없습니다. – davek

+0

그것이 옵션이지만, 우리는 오히려 그것을하는 방아쇠를 많이합니다. –

관련 문제