본문 바로가기

오라클

PL/SQL

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