본문 바로가기

DataBase

[Oracle] PL/SQL 스토어드 프로시저(Stored Procedure) 간단 정리 + 내가 자주내는 오류 녀석들

스토어드 프로시저(Stored Procedure)

스토어드 프로시저는 create procedure문을 사용해서 스키마 내부에 영구적으로 저장할 때 사용

(declare ~ begin ~ end문은 1회성으로 사용되며 매번 실행할 때마다 컴파일이 수행되며 익명 프로시저(Anonymous Procedure)라고 불림)

 

 

* 형식

create or replace procedure 스토어드 프로시저명 (파라미터) as[is]
	변수 선언
begin
	PL/SQL 문장
[exception]
end [스토어드 프로시저명];

 

 

* 데이터 타입

 - 일반 변수 ; 보통의 변수와 비슷하게 사용

 - 상수 ; constant 키워드 사용해서 초기값을 주면 됨

 - %type ; 이미 선언된 다른 변수나 테이블 컬럼 이용해서 선언

               (테이블 컬럼의 속성을 정확히 몰라도 사용 가능하며, 컬럼이 변경되어도 pl/sql 수정하지 않아도 됨)

 - %rowtype ; 하나 이상의 데이터값을 갖는 데이터형으로 배열과 비슷한 역할을 함

                     (테이블이나 뷰 컬럼의 데이터 형식, 크기, 속성들을 그대로 사용할 수 있으며,

                      테이블 컬럼의 속성을 정확히 몰라도 사용 가능하며, 컬럼이 변경되어도 pl/sql 수정하지 않아도 됨)

 - 레코드(record) ; %rowtype은 테이블에서 전체 커럼의 데이터 형식을 한꺼번에 자동으로 가져오지만,

                             레코드는 여러 컬럼에 직접 데이터 형식을 지정하며 선언시에 초기화 가능

 - 테이블(table) ; pl/sql에서의 테이블은 1차원 배열이며 크기에 제한이 없고 데이터가 추가되면 행이 자동으로 증가됨

                          (binary_integer타입의 인덱스번호로 순서가 1부터 정해짐)

 

 

* 내가 자주내는 오류 녀석들.....부들부들...

 1. 오타

   - 내가 생각해도 어이없는 실수;; 정신차리자 딩딩아!!!!

 2. 반복문에 초기값 1 대신 l을 쓰고 있음 (예시로 for i in 1..idx loop인데 for i in l..idx loop 이런식;)

   - 이건 진짜 ;;; 무슨 ;;;;; 심지어 오류에 'L' 이게 떠있는데도 엥? 이러고 다른 곳 보고 있었음;;; 바보인가

 3. emp%rowtype이면 emp_list도 select * from emp해야함

   - 아 이건 따로 캡쳐해서 추가해야할듯 ;; 지금은 뭔말인지 아는데 나중에 보면 모를듯;;

 4. v_emp를 %rowtype이라해서 dbms_output.put_line(v_emp(i))이래버리면 오류남;; 컬럼을 다 명시해줘야하는듯;;

   - 얘도 캡쳐해서 추가해야할듯;

 5. 변수 선언 후 ; 안 찍음

   - 실제로는 땀을 그렇게 흘리면서 코딩할때는 왜 땀을 안흘리냐 왜;;;;;;;

 6. end loop;를 loop end;로 씀;;

   - 이건 답도 없다;; end 프로시저명; 이거 생각해서 외워라 딩딩아;;  

 

 

* 프로시저 관련 영상 및 사이트

https://www.youtube.com/watch?v=ba_mUEJ4qtw

 

 

https://www.youtube.com/watch?v=JxjAyYe-o9Y

 

http://www.gurubee.net/lecture/1047

 

PL/SQL 테이블

  PL/SQL 에서의 테이블은 오라클 SQL에서의 테이블과는 다르다. PL/SQL에서의 테이블은 일종의 일차원 배열이라고 생각하면 이해하기 쉬울것이다.  ..

www.gurubee.net

 

 


제발 한번에 오류 없이 성공하는 그 날까지 화이팅~!