쿼리가 주어지면 어떤 트리거가 발생하는지 알 수 있습니까?
트리거가 너무 많은 데이터베이스가 있습니다.그들은 캐스케이드를 할 수 있습니다.
단순해 보이는 질문이 하나 있는데, 모든 트리거의 효과를 전혀 기억할 수 없습니다.그래서, 그 간단한 질문은 실제로 전혀 간단하지 않고 제가 기대하는 것을 하지 않을 수도 있습니다.
쿼리를 실행하기 전에 어떤 트리거가 실행되는지 또는 쿼리를 실행한 후 어떤 트리거가 실행되었는지(아직 커밋되지 않음) 알 수 있는 방법이 있습니까?
저는 다음과 같은 질문에는 별로 관심이 없습니다.SELECT … FROM user_triggers WHERE …
왜냐하면 나는 그것들을 이미 알고 있고, 또한 그것이 내 쿼리에서 트리거의 발사 조건이 충족될지 여부를 알려주지 않기 때문입니다.
감사해요.
"트리거가 너무 많은 데이터베이스를 가지고 있습니다.그들은 캐스케이드를 할 수 있습니다."
이것이 많은 사람들이 트리거를 해부하는 이유 중 하나일 뿐입니다.
"쿼리를 실행하기 전에 어떤 트리거가 실행되는지 알 수 있는 방법이 있습니까?"
아니요. 업데이트 트리거 본문에서 찾을 수 있는 것을 고려해 보겠습니다.
if :new.sal > :old.sal * 1.2 then
insert into big_pay_rises values (:new.empno, :old.sal, :new.sal, sysdate);
end if;
BIG_PAY_RISES의 트리거가 작동할지 여부를 어떻게 알 수 있습니까?DML 문에서 구문 분석할 수 없는 알고리즘에 따라 다를 수 있습니다.
따라서 DBA_를 재귀적으로 검색하는 것이 최선입니다.트리거 및 DBA_Dependencies는 캐스케이드에 포함될 수 있는 모든 트리거를 식별합니다.그러나 어떤 시나리오에서 어떤 것이 확실히 발사될지는 확인할 수 없을 것입니다.
또는 실행 후 어떤 트리거가 실행되었습니까(아직 커밋되지 않음)?"
다른 사람들이 지적했듯이, 로깅은 한 가지 옵션입니다.그러나 Oracle 11g을 사용하는 경우에는 PL/SQL 계층 프로파일러라는 다른 옵션이 있습니다.이 도구는 트리거를 포함하여 PL/SQL 호출에 의해 터치된 모든 PL/SQL 프로그램 단위를 추적하는 비침습적인 도구입니다.계층 프로파일러의 멋진 기능 중 하나는 다른 스키마에 속하는 PU가 포함되어 있다는 점이며, 이는 계단식 트리거에 유용할 수 있습니다.
따라서 SQL을 익명 블록으로 묶고 계층 프로파일러와 함께 호출하기만 하면 됩니다.그런 다음 보고서를 필터링하여 발생한 트리거만 표시할 수 있습니다.자세히 알아봅니다.
쿼리를 실행하기 전에 어떤 트리거가 실행되는지 또는 쿼리를 실행한 후 어떤 트리거가 실행되었는지(아직 커밋되지 않음) 알 수 있는 방법이 있습니까?
이 문제를 해결하기 위해 PL/SQL 디버거를 사용하여 익명 블록 내에서 쿼리를 실행합니다.
쿼리를 통해 구문 분석하고 쿼리와 관련된 트리거를 제공하는 것은 없습니다.이것처럼 간단할 것입니다.실행 중인 쿼리에서 테이블 이름을 선택하고 쿼리를 실행하기 전에 각 테이블 이름에 대해 다음 쿼리를 사용하여 트리거를 나열하기만 하면 됩니다.그것은 충분히 간단하지 않습니까?
select trigger_name
, trigger_type
, status
from dba_triggers
where owner = '&owner'
and table_name = '&table'
order by status, trigger_name
언급URL : https://stackoverflow.com/questions/9395299/is-it-possible-to-know-what-triggers-would-fire-given-a-query
'programing' 카테고리의 다른 글
예외를 던질 때 종료 코드를 설정하는 방법 (0) | 2023.09.04 |
---|---|
django - MySQL 데이터베이스에 저장되지 않은 레코드이지만 AutoIncrement가 증가합니다. (0) | 2023.09.04 |
속도를 위해 var2 순서에 따라 'Y'와 'Z' 그룹 사이의 col<>'X'와 col2가 있는 테이블에서 SELECT Count(DISCTINCT(col)) var, col2 var2를 최적화하십시오. (0) | 2023.09.04 |
노드JS와 함께 설치된 v8 버전을 확인하는 방법은 무엇입니까? (0) | 2023.09.04 |
ES6를 사용한 Javascript의 열거 (0) | 2023.08.30 |