시퀀스Sequence
숫자로 이루어짐 ⇒ 매번 정해진 증가치만큼 숫자가 증가
시퀀스 생성
create sequence 시퀀스명
start with 출발숫자
increment by 증가치
maxvalue 최대치
minvalue 최소치
cycle
nocache
minvalue의 최소치 ⇒ start with의 출발숫자와 같거나 작아야함
start with는 처음 한 번만 쓰이는 수치,
minvalue와 maxvalue로 계속 반복
- 예시
create sequence 시퀀스명 start with 2 -- 첫번째 출발은 2 increment by 1 -- 증가치는 1 maxvalue 5 -- 최대값이 5 minvalue 1 -- 최소값이 1 cycle -- 반복 nocachecreate sequence 시퀀스명 start with 1 -- 첫번째 출발은 1 increment by 1 -- 증가치는 1 nomaxvalue -- 최대값이 없는 무제한 nominvalue -- 최소값이 없다 nocycle -- 반복을 하지 않는다 nocache
시퀀스 사용
시퀀스명.nextval
시퀀스 조회
select * from user_sequences
시퀀스명.currval
select last_number
from user_sequences
where sequence_name = '시퀀스명'
시퀀스 삭제
drop sequence 시퀀스명
동의어Synonym
조회하고자하는 테이블명이 길 때 테이블명을 짧게 만들어서 사용하고자할 때 사용
시노님 생성
create or replace synonym 시노님명 for 원래테이블명
시노님 조회
select *
from user_synonyms
시노님 삭제
drop synonym 시노님명
프로시저PL/SQL
Proceduer Language / Strunctured Query Language
일반 select문보다 속도가 빠르다 (프로시저는 컴파일(생성)할 때 한번만 조건검사해도 됨. select문은 매번 select해서 조건을 검사해야함)
자바의 메소드와 비슷함
PL/SQL에서 어떤 변수에 값을 넣어줄 때 select문 ⇒into, 직접 값을 변수에 넣어줄 때 ⇒ := 해준다.
프로시저 생성
1. 기본형
create or replace procedure 프로시저명 (파라미터변수 IN 파라미터타입)
is --변수선언부, 자리수지정
V_컬럼명1 변수타입(자리수);
V_컬럼명2 변수타입(자리수);
begin --실행부, 1대1매핑
select 컬럼명1, 컬럼명2
INTO
V_컬럼명1, V_컬럼명2
from 테이블명
where 파라미터조건;
dbms_output.put_line(V_컬럼명1 || V_컬럼명2); --화면에 출력하고싶은 내용 (==sysout)
end 프로시저명;
파라미터변수는 p_를 붙이면 기존컬럼과 구분하기 쉬움
파라미터타입에는 자리수 지정 불가
IN ⇒ 입력모드 OUT ⇒ 출력모드
select 되어진 값(컬럼명1, 컬럼명2)은 항상 변수(V_컬럼명1, V_컬럼명2)에 넣어주어야 함, 즉 변수로 INTO 해주어야함
2. 테이블명.컬럼명%type 으로 변수선언
create or replace procedure 프로시저명 (파라미터변수 IN 테이블명.컬럼명1%type) -- 컬럼명1의 타입을 쓰겠다는 의미
is
V_컬럼명1 테이블명.컬럼명1%type;
V_컬럼명2 변수타입(자리수);
begin
select 컬럼명1, 컬럼명2
INTO
V_컬럼명1, V_컬럼명2
from 테이블명
where 파라미터조건;
dbms_output.put_line(V_컬럼명1 || V_컬럼명2);
end 프로시저명;
3. record(행)타입으로 변수선언
create or replace procedure 프로시저명 (파라미터변수 IN 파라미터타입) -- 컬럼명1의 타입을 쓰겠다는 의미
is
type record타입명 is record
(변수명1 변수타입(자리수)
,변수명2 변수타입(자리수)
);
v_rcd 타입명;
begin
select 컬럼명1, 컬럼명2
INTO
v_rcd
from
where 파라미터조건;
dbms_output.put_line(v_rcd.컬럼명1 || v_rcd.컬럼명2);
end 프로시저명;
4. 테이블명%rowtype 으로 변수선언
create or replace procedure 프로시저명 (파라미터변수 IN 파라미터타입)
is
v_all 테이블명%rowtype;
v_result 변수타입(자리수);
begin
select *
INTO
v_all
from 테이블명
where 파라미터조건;
v_result := --직접 값을 변수에 넣어줄 때
v_all.컬럼명1 || v_all.컬럼명2
dbms_output.put_line(v_result);
end 프로시저명;
컴파일 에러시 오류찾기
cmd에서 찾는 것이 빠르다
sqlplus /nolog ⇒ hr/aclass ⇒ 프로시저 복붙 후 / ⇒ show errors
프로시저 출력
보기 - DBMS출력 - +기호에서 local_hr로 연결
exec또는execute 프로시저명(파라미터);
프로시저 조회
select *
from user_source
where type = 'PROCEDURE' and name = '프로시저명(대문자)';