중화사전망 - 자전 검색 - Sql 삽입 트리거 및 갱신 트리거 정보

Sql 삽입 트리거 및 갱신 트리거 정보

다음과 같은 세 가지 유형의 DML 트리거가 있습니다.

1, 트리거 삽입

2, 업데이트 트리거;

3, 트리거를 삭제합니다.

트리거의 구성 요소:

트리거 타이밍, 이벤트, 테이블 이름 및 유형을 지정하는 트리거 선언.

트리거, PL/SQL 블록 또는 프로시저 호출의 실행.

트리거에 대한 제한은 where 절을 통해 구현됩니다.

유형:

응용 프로그램 트리거, 프론트 데스크 개발 도구 제공

데이터베이스 내부의 특정 조건에 의해 트리거되도록 정의된 데이터베이스 트리거 다음과 같이 나뉩니다.

DML 트리거

데이터베이스 레벨 트리거

대체 트리거

DML 트리거 구성 요소:

1, 트리거 타이밍

2. 트리거 이벤트

3, 테이블 이름

4, 트리거 유형

5, When 절

6. 트리거 본문

트리거를 생성할 수 있는 객체 (데이터베이스 테이블, 데이터베이스 뷰, 사용자 스키마 및 데이터베이스 인스턴스) 입니다.

DML 트리거를 생성하려면 다음과 같이 하십시오.

[또는 대체] 트리거 [패턴] 을 생성합니다. ] 트리거 이름입니다.

Before | after insert | delete | (열 이름 업데이트)

테이블 이름 정보

[행당]

조건부로 삼다

PL/SQL 블록

For each row 의 의미는 작업 테이블이 한 번 있는 문에서 성공한 모든 작업이 한 번 발생한다는 것입니다. 쓰지 않으면 테이블 레벨 트리거이므로 작업 행 수에 관계없이 한 번만 트리거됩니다.

When 조건이 나타나면 DML 작업 중에 트리거가 트리거될 수 있지만 트리거가 반드시 실제 작업을 수행하는 것은 아닙니다. 예를 들어, when 이후의 조건이 참이 아닌 경우 트리거는 단순히 PL/SQL 블록을 생략합니다.

삽입 트리거를 생성하려면 다음과 같이 하십시오.

트리거 tg_insert 생성 또는 대체

학생을 삽입하기 전에

시작

Dbms_output.put_line ('삽입 트리거는 chufa le ......);

끝;

/

실행 효과:

SQL> 학생 삽입

두 가지 값 (202,' 동천',' f');

삽입 트리거는 chufa le 입니다 .....

테이블 레벨 트리거 갱신 예 :

트리거 tg_updatestudent 생성 또는 대체

학생 업데이트 후

시작

Dbms _ output.put _ line ('update trigger is chufa le .....);

끝;

/

작동 효과:

SQL> 업데이트 학생 세트 se =' f

갱신 트리거는 chufale 입니다 .....

8 개 행이 업데이트되었습니다.

테이블 레벨 트리거는 여러 행이 업데이트될 때 한 번만 발생한다는 것을 알 수 있습니다.

학생이 업데이트된 후에 추가하는 경우

행당 For 는 행 레벨 트리거가 되며, 실행 효과는 다음과 같습니다.

SQL> 업데이트 학생 세트 se =' m

갱신 트리거는 chufale 입니다 .....

갱신 트리거는 chufale 입니다 .....

갱신 트리거는 chufale 입니다 .....

갱신 트리거는 chufale 입니다 .....

갱신 트리거는 chufale 입니다 .....

갱신 트리거는 chufale 입니다 .....

갱신 트리거는 chufale 입니다 .....

갱신 트리거는 chufale 입니다 .....

8 개 행이 업데이트되었습니다.

: new 및: old: 행 레벨 트리거에 사용해야 합니다. 즉, 두 변수를 사용하는 트리거는 각 행에 대해 있어야 합니다.

이 두 변수는 시스템에서 자동으로 제공하는 배열 변수입니다. new 는 새로 삽입된 값을 기록하고 old 는 삭제된 값을 기록합니다.

Insert 를 사용하는 경우: new 에만 값이 있습니다.

Delete 를 사용할 경우: old 에만 값이 있습니다.

Update 를 사용할 때: new 및: old 에 값이 있습니다.

이렇게 사용할 수 있습니다: DBMS _ output. Put _ line ('insert 트리거는 chufa 입니다.

Dbms_output.put_line ('새 id 는' ||:new.stui 입니다

Dbms_output.put_line ('새 이름은' ||:new.st 입니다

Dbms_output.put_line ('새 se 는' | |: new.se);

다음과 같은 방법으로 데이터 딕셔너리에서 테이블의 트리거를 검사할 수 있습니다.

SQL> 사용자 트리거에서 트리거명을 선택합니다

2 여기서 table _ name = upper ('student');

트리거 이름입니다

--

TG _ 삽입

TG _ update 학생

행 레벨 삭제 트리거는 다음과 같습니다. 이전 변수:

트리거 tg_deletestudent 생성 또는 대체

학생을 삭제하기 전에

각 행에 대해 다음을 수행합니다

시작

Dbms _ output.put _ line ('old is:' | |: old.stuid);

Dbms_output.put_line ('이전 이름:' | |: old.stuname);

끝;

/

작동 효과:

SQL> 는 학생들로부터 제거됩니다.

낡은 것은: 202

옛 이름: 동천

오래된 것은: 10 1

옛 이름: 유덕화

오래된 것은: 102

옛 이름: 링청하

오래된 것은: 103

옛 이름: 이장공

오래된 것은: 104

옛 이름: 견수문

오래된 것은: 100 1

옛 이름: 이연걸

오래된 것은: 1009

옛 이름: 통레포크

낡은 것은: 203

이전 이름: kfdj

낡은 것은: 209

옛 이름: 젠장

9 개 행이 삭제되었습니다

When 사용: 시작 전에 when(old.se='f') 을 추가하면 트리거가 실행되는 PL/SQL 청크가 DML 작업은 제대로 완료되지만 삭제만 됩니다.

Se='f' line 은 트리거의 사전 조치만 수행하며 실행 효과는 다음과 같습니다.

SQL> 는 학생들로부터 제거됩니다.

낡은 것은: 209

옛 이름: 젠장

9 개 행이 삭제되었습니다. 여기서 9 개의 행이 삭제되었지만 트리거 본문은 행 레벨 트리거로 한 번만 실행되었습니다.

혼합 트리거:

이 세 가지 술어를 삽입, 삭제, 갱신하여 현재 작업이 어떤 작업인지 나타낼 수 있습니다.

트리거 혼합 트리거 생성 또는 대체

학생을 삽입하거나 업데이트하거나 삭제하기 전에

각 행에 대해 다음을 수행합니다

시작

삽입된 경우 다음을 수행합니다

Dbms_output.put_line('insert le .....');

끝 if;

을 (를) 삭제하면

Dbms _ output.put _ line ('삭제 le ......);

끝 if;

끝;

/

삽입 시 현재 동작이 삽입인지 자동으로 확인합니다.

SQL> 는 학생 가치에 삽입됩니다 (303,' 나',' F').

음악을 삽입하다 .........

삭제하면 현재 동작이 자동으로 삭제로 간주됩니다.

SQL> 는 학생들로부터 제거됩니다.

음악을 삭제하다 .....

트리거 내부의 주체 PL/SQL 은 명령문이므로 dbms_output 뿐 아니라 삽입 및 삭제 작업도 가능합니다.

이는 로그 테이블의 원리입니다. 사용자가 DML 문을 실행할 때 트리거 주체는 로그 테이블 레코드 작업 트랙을 삽입하는 트리거입니다.

트리거를 사용해야 하는 이유는 무엇입니까? Good_store 는 상품이 창고에 들어오고 나가는 것을 기록하는 두 개의 테이블이 있을 때 재고의 제품 범주와 수량을 기록하는 데 사용됩니다.

Good_out 은 제품 체크 아웃의 클래스와 수량을 기록하는 데 사용되므로 특정 수의 제품이 체크 아웃될 때마다 제품의 클래스와 수량을 good_out 에 삽입해야 합니다.

수량을 체크 아웃하고 good_store 테이블에서 update 를 사용하여 해당 범주 재고의 제품 수량을 업데이트합니다. 이것은 우리에게 해야 할 두 가지 임무를 주었다: good_out 삽입.

표 뒤에 good_store 테이블을 업데이트하는 수동 과정은 우리를 보기 힘들게 한다. 그 중 하나만 하면 데이터가 일치하지 않습니다. 이제 트리거를 사용할 수 있습니다

Good_out 테이블의 삽입 작업은 good_store 를 업데이트하는 트리거와 함께 바인딩됩니다. 물론, 이 과정은 거래여야 한다. Good_out 테이블 삽입은 걱정할 필요가 없습니다. 작업에 바인딩된 트리거 작업은 실행되지 않습니다. 나는 오라클이 원자로 설계되었다고 믿는다.

참고: 트리거는 원래 SQL 문의 속도를 줄입니다.

대체 트리거:

뷰에 생성된 트리거는 선택적 트리거이며 행 레벨 트리거만 될 수 있습니다.

대체 트리거를 사용해야 하는 이유는 무엇입니까?

여러 테이블을 기반으로 하는 필드 조인 쿼리의 뷰가 있는 경우 이제이 뷰에 직접 삽입하려는 경우; 그럼, 뷰에 대한 나의 삽입에 대해 생각해 보셨을 겁니다.

뷰를 구성하는 테이블에 어떻게 반영됩니까? 실제로 뷰의 삽입 작업에 바인딩할 트리거를 정의하는 것 외에 시스템 오류 보고서를 통해 데이터를 뷰에 직접 삽입할 수 있는 방법은 없습니다. 이것이 우리가 대체 트리거를 사용하는 이유입니다. 대체는 실제로 트리거의 본문 부분이 뷰의 삽입 작업을 개별 테이블의 상세 삽입으로 변환하는 것을 의미합니다.

변형 테이블: 변형 테이블은 현재 SQL 문에서 수정 중인 테이블이므로 변형 테이블에 바인딩된 트리거는 cout () 함수를 사용할 수 없습니다. 그 이유는 간단합니다. SQL 문이 방금 테이블을 수정했습니다. 어떻게 통계합니까?

제약 조건 테이블:

유지 보수:

트리거 변경 ... 비활성화; 트리거를 사용할 수 없게 만듭니다.

트리거 변경 ...... 할 수 있도록; 방아쇠를 엽니다.

Oracle 의 내장 패키지

데이터베이스의 기능을 확장합니다.

PL/SQL 에 SQL 함수에 대한 액세스를 제공합니다.

일반적으로 sys 권한을 가진 고위 경영진이 사용합니다.

일반적인 패키지는 dbms_output 입니다. 항상 put _ line () 프로시저를 사용합니다.

Dbms_standard 는 언어 도구를 제공합니다.

Dbms_lob 작업 Oracle LOB 큰 데이터 작업을 위해 설계되었습니다.

Dbms_lock 사용자 정의 잠금;

Dbms_job 을 사용하면 PL/SQL 프로시저 일정을 잡을 수 있습니다.

Dbms_alert 는 데이터베이스 이벤트에 대한 비동기 통지를 지원합니다.

1, DBMS _ output 의 일부 프로그램:

A): 활성화

B): 사용 안 함

C):put 은 데이터를 캐시 (SQL-Plus 의 캐시, 실제로 전체 창) 에 넣고 출력 기능을 제공하지 않습니다.

D):put_line 은 이전에 캐시에 있던 모든 데이터 출력을 만들 수 있습니다. 다음 줄로 전환합니다.

E): 새 줄

F):get_line

G): 가져오기 _ 행

2, dmbs_lob, 이 패키지는 시스템 관리자만 조작할 수 있습니다.

Clob 는 최대 2g 의 문자 데이터로 저장할 수 있습니다.

블럽은 최대 4G 의 이진 데이터로 저장할 수 있습니다.

Nclob 은 유니코드 문자로 저장됩니다.

파일 다운로드 목록 예:

다운로드 카탈로그 테이블을 만들려면 다음과 같이 하십시오.

테이블 아래 파일 리스트 작성

(참조)

Id varchar(20) 는 비어 있지 않은 기본 키입니다.

Name varchar(40) 는 비어 있지 않습니다.

파일 위치 bfile,

Clob 설명

) 을 참조하십시오

/

디렉토리를 만들려면 다음과 같이 하십시오.

디렉토리 filedir 을 "f:\oracle" 로 만들거나 대체합니다

/Oralce 에 디렉토리를 등록하기만 하면 되지만 실제로는 디스크에 디렉토리를 만들지 않습니다. Oracle 은 운영 체제의 파일 시스템을 관리하고 잠글 권한이 없습니다.

카탈로그에 데이터를 삽입하려면 다음을 수행합니다.

다음 행 파일 목록에 삽입

값 ('1000 1',' Oracle PLSAL 프로그래밍 가이드', bfilename (upper ('filedir'),'

다음 행 파일 목록에 삽입

값 ('10002',' Java 파워', bfilename (upper ('filedir'),' x.jpg'),,

/demo.mp3, x.jpg 는 실제로 filedir 의 디렉토리 f: \ Oracle;

질의를 시도하면 다음과 같은 결과가 나타납니다.

Sys & gtselect * from downfilelist

SP2-0678: SQL*Plus 를 통해 열 또는 속성 유형을 표시할 수 없습니다.

세 번째 열은 표시할 수 없기 때문에 이진수입니다.

다음은 dbms_lob 의 일부 프로그램을 사용하여 작동합니다.

1, 읽기 프로세스

선언

Tempdesc clob

Ireadcount int

Istart int

Soutputdesc varchar (100);

시작

Ireadcount:= 5;;

Istart: =1;

Downfilelist 에서 설명-tempdesc 를 선택합니다. 여기서 id ='10001';

Dbms_lob.read(tempdesc, ireadcount, istart, soutputdesc); Clob 유형 tempdesc 의 데이터를 character 유형 soutputdesc 로 읽습니다

Dbms_output.put_line ('처음 5 자는' | | soutputdesc' 입니다.);

끝;

/유니코드의 경우 한자와 글자가 같은 자릿수를 차지합니다.

2, getlength 함수

Downfilelist 에서 설명-tempclob 을 선택합니다. 여기서 id ='10001';

Ilen:=dbms_lob 입니다. Getlength (tempclob);

추가, 복제 ... .....

X 를 Y 로 선택하면 Y 는 X 의 독립 복사본이 아닙니다. Y 를 수정하면 X 도 수정되기 때문입니다.

3, 파일 exists 함수

Select id, DBMS _ lob.file exists (file location) from down file list.

Bfile 유형 필드 filelocation 으로 지정된 시스템 아래의 디렉토리에 filelocation 으로 지정된 시스템 파일이 있으면 int 1 을 반환하고 그렇지 않으면 0 을 반환합니다.

이는 Oracle 이 java.io 패키지의 클래스와 마찬가지로 시스템의 파일 상태를 감지할 수 있음을 의미합니다.

Bfile 유형 데이터의 조작 함수는 fileisopen, fileopen, fileclose 등입니다.

당신에게 도움이 된다면 만족스러운 답으로 받아들이는 것을 잊지 마세요. 감사합니다. 즐거운 생활 되세요!

와엘라