PL/SQL 블럭구조
1. 4개의 키워드로 구성
a. [declare]
b. begin
c. [exception]
d. end;
2. declare
- 선언부, declare section
- 프로그램에서 사용되는 변수, 객체 등을 선언하는 영역
- 생략 가능
3. begin
- 실행부, 구현부, executable section
- begin ~ end
- 프로그램에서 실제 구현 내용들을 선언하는 영역
- 표준 SQL + PL/SQL(연산, 제어 등..)
- 생략 불가능
4. exception
- 예외 처리부, exception section
- catch 절 역할
- 예외 처리 코드를 선언한느 영역
- 생략가능
5. end;
- 블럭의 종료
- 생략 불가능
6. PL/SQL 블럭 = 선언부 + 실행부 + 예외처리부
begin
begin
end;
end;
declare
변수, 자원 선언
begin
구현부
exception
예외처리부
end;
자료형 & 변수
자료형
- 표준 SQL 동일(거의 유사 + 확장)
변수 선언하기
- 변수명 자료형[NOT NULL] [ DEFAULT 값]
- 표준 SQL에서 컬럼 정의하는 구문과 유사
- 변수의 역할 : 질의(SELECT 문)의 결과나 인자값을 저장하는 용도
연산자
- 표준 SQL 동일
표준 SQL 대입 연산자
-컬럼명 = 값;
-용도 : 컬럼값 대입
PL/SQL 대입 연산자
- 변수 := 값;
- 용도 : 변수값 대입
-----------------------------------------------------------------------------------------------------------------------------------------
EX)
declare
num number;
name varchar2(30)
today date;
begin
num :=10;
dbms_output.put_line(num);
name := '홍길동';
dbms_output.put_line(name);
today := sysdate;
dbms_output.put_line(to_char(today,'yyyy-mm-dd'));
today := '2018-09-04-;
dbms_output.put_line(today);
end;
ex) 테이블에서 조회한 데이터를 변수에 담기
declare
vbuseo varchar2(15);
begin
select buseo into vbuseo from tblInsa where name = '홍길동'; => vbuseo := (select buseo from tblInsa where name = '홍길동');
dbms_output.put_line(vbuseo);
end;
declare
cnt number;
begin
select count(*) into cnt from tblAddressBook where address like '서울특별시%';
dbms_output.put_line('서울특별시 인원수 : ' || to_char(cnt,'9999'||'명');
end;
**
- 단일 컬럼 + 단일 행
- PK 조건 + 단일 컬럼 : SELECT 결과셋
- 집계 함수의 결과셋
-----------------------------------------------------------------------------------------------------------------------------------------
참조형
- 원본(컬럼)의 자료형을 참조해서 변수의 자료형으로 사용할 수 있다.
- 원본(컬럼)의 자료형을 몰라도 된다.
- 유지 보수 유리
1. %type
- 대상 컬럼의 자료형과 길이를 참조해서 해당 변수에 적용하겠습니다.
- 복사되는 항목
a. 자료형
b. 길이
c. not null
2. %rowtype
- 테이블 레코드 구조를 참조해서 해당 변수에 적용하겠습니다.
- %type의 집합
declare
vfisrt tblname.first%type;
vlast tblname.last%type;
vheight tblname.height%type;
begin
select first,last,height into vfirst,vlast,vheight from tblname
where height = (select max(height) form tblname);
dbms_output.put_line('가장 키 큰 사람 : ' ||vlast||vfisrt||'-'||vheight);
select first,last,height into vfirst, vlast, vweight from tblname
where weight = (select max(weight) from tblname);
dbms_output.put_line('가장 뚱뚱한 사람 : ' ||vlast||vfirst||'-'||vweight);
end;
declare
oldMan tblMen.name%type; --옛남친
newMan tblMen.name%type; --현남친
newWoman tblWomen.name%type; --여자친구
begin
oldMan := '홍길동';
newMan := '하하하';
--1.
select couple into newWoman from tblMen where name =oldMan;
--2.
update tblWomen set couple = newMan where name =newWoman;
--3.
update tblMen set couple = newWoman where name =newMan;
--4.
update tblMen set couple = null where name =oldMan;
dbms_output.put_line('완료');
end;
**PL/SQL 블럭 구조
- 자료형 +변수생성
- 변수의 자료형 > 테이블 +컬럼 참조형
- select 결과 > 단일값 가져오기
- select 결과 > 단일레코드 + 다중 컬럼값 가져오기
- 변수값을 select, update, delete, insert 등에 사용하기
declare
vrow tblInsa%rowtype --컬럼의 집합
vnum tblInsa.num%type -- 컬럼 변수
begin
vnum :=1010;
select name,buseo,city into vrow from tblInsa where num = vnum;
dbms_output.put_line(vrow.name);
dbms_output.put_line(vrow.buseo);
dbms_output.put_line(vrow.city);
end;
declare
vrow tblMen%rowtype;
begin
--1. 무명씨의 모든 정보 가져오기
--select * from tblMen where name ='무명씨';
select * into vrow from tblMen where name ='무명씨';
--2. 1번의 모든 정보를 tblWomen에 추가하기(insert)
insert into tblWomen(name,age,height,weight,couple)
values(vrow.name, vrow.age, vrow.height, vrow.weight, vrow.couple);
--3. tblMen에서 무명씨 정보 삭제하기(delete)
delete from tblMen where name = '무명씨';
end;
**PL/SQL 상수
- 리터럴
- 자바 : public static final double PI =3.14;
- 변수명 자료형 [not null] [default];
- 상수명 constant 자료형 [not null] [default];
'오라클' 카테고리의 다른 글
프로시저 (0) | 2018.09.11 |
---|---|
정규화(Normalization) (0) | 2018.09.06 |
키의 개념 및 종류 (0) | 2018.09.06 |
데이터베이스 모델링 (0) | 2018.09.06 |
Group by 절 (0) | 2018.09.06 |