데이터베이스 저장 프로세스, 트리거, 커서, 서열 총결

스토리지 프로세스(Stored Procedure)
대형 데이터베이스 시스템에서 특정한 기능을 완성하기 위한 SQL 문장 집합을 데이터베이스에 저장하고 첫 번째 컴파일을 거친 후에 다시 호출하면 다시 컴파일할 필요가 없다. 사용자는 저장 프로세스의 이름을 지정하고 파라미터를 제시한다(이 저장 프로세스에 파라미터가 있다면).저장 프로세스는 데이터베이스 중의 중요한 대상으로 어떤 디자인이 좋은 데이터베이스 응용 프로그램이든 저장 프로세스를 사용해야 한다.
구문:
create [or replace] procedure name(parameter in type, parameter out type)
is/as
[변수 이름] type
begin
저장 프로시저
end;
/
1) in은 입력, out은 출력
2) 저장 과정 중 is와 as는 모두 같다
3) 변수를 선언할 때 number일 경우 크기를 지정하지 않고 varchar2일 경우 지정해야 함
저장 시 커서를 사용하려면 다음과 같이 하십시오.
유표
SQL 문의 실행 결과를 저장할 수 있는 데이터 버퍼가 있습니다.모든 커서 구역에 하나의 이름이 있는데 사용자는 SQL 문구로 하나하나 커서에서 기록을 얻고 주 변수에 부여하여 주 언어에 의해 진일보 처리할 수 있다.
저장 중에 커서를 선언하려면 다음과 같이 하십시오.
cursor cursor_name is select column_name from table_name where condition;
순환 사용:
open cursor_name;
loop
fetch cursor_name into variable1, variable2;
exit when cursor_name%notfound;
(operation on variables)
end loop;
close cursor_name;
예:
create or replace procedure l_procedure
is
  leave_num number;
  student_num varchar2(16);
  cursor c_studentnum is select distinct studentnum from leave_apply;
begin
   open c_studentnum;
   loop
   fetch c_studentnum into student_num;
   exit when c_studentnum%notfound;
   select count(l.applyNum) into leave_Num
   from leave_apply l
   where l.studentnum = student_Num;
   insert into leave_apply_stat(studentnum,leavenum) values(student_Num, leave_Num);
   end loop;
   close c_studentnum;
   commit;
end;

--------------------------------------------------------------------------------------------------
트리거
SQL 서버는 프로그래머와 데이터 분석원에게 데이터의 완전성을 확보하는 방법을 제공합니다. 이것은 테이블 이벤트와 관련된 특수한 저장 프로세스입니다. 이 프로세스의 실행은 프로그램이 호출하거나 수동으로 시작하는 것이 아니라 이벤트가 촉발합니다.
create or replace trigger [trigger name]
before/after insert/update/delete on [table name]
for each row(행 트리거)
when (판단 조건)
declare
[variable name] type;
begin
end;
/
1) before/after 는 트리거가 작업이 완료되기 전/후에 트리거되어야 하는 것을 가리킨다
2) insert/update/delete는 트리거를 트리거하는 조건을 가리킨다
3) for each row는 이 트리거가 하나의 줄 트리거임을 의미하며, 줄마다 이 트리거를 트리거합니다.
(foreach row를 추가하는 것과 추가하지 않는 것의 차이점은 다음과 같다. 추가한 후에 업데이트가 여러 줄을 한 번에 업데이트하면 한 줄의 변경 사항이 트리거를 촉발한다. 만약에 추가하지 않으면 몇 줄을 수정하든 표에 대한 조작은 한 번, 트리거만 촉발한다)
4) 기본 테이블의 조작으로 인한 트리거는 기본 테이블이 변경된 후에 이 테이블에 접근할 수 없습니다.
시퀀스 사용:
create sequence [sequence name] start with 1 increment by 1 maxvalue 100 minvalue 1 no circle cache 20;
1) start with는 시퀀스 시작 값을 나타냅니다.
2) increment 대표 시퀀스 자체 부가가치
3) maxvalue 최대값,minvalue 최소값,nocircle 순환 허용 여부,cache는 미리 생성된 메모리에 저장된 시퀀스 값 개수를 가리킨다
예:
create sequence messagenum_seq start with 0 increment by 1;

create or replace trigger tri_update
after update of state on leave_apply
for each row
declare
messagenum number;
content varchar2(128); 
begin 
     select messagenum_seq.nextval into messagenum from dual;	
     content := '  ,' || :new.state;
     insert into message(messagenum, content, applynum, studentnum, time) values(messagenum, content, :new.applynum, :new.studentnum, sysdate());
end;
/

좋은 웹페이지 즐겨찾기