스토어드 프로시저(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
제발 한번에 오류 없이 성공하는 그 날까지 화이팅~!
'DataBase' 카테고리의 다른 글
[DataBase] 누구인가? 누가 나의 데이터베이스를 가져갔는가 (0) | 2023.07.20 |
---|---|
[DB설계] 하나의 게시글에 여러 개의 태그를 등록하고 싶은데 왜 tag테이블이 두 개가 필요한가 (0) | 2023.07.05 |
[Oracle] Foreign key 제약사항 (0) | 2023.03.28 |
[Oracle] insert에 대하여 알아보자 (0) | 2023.03.28 |
[Oracle] 급여에 따라 급여 인상율 다르게 적용하기 (decode, case, sign) (0) | 2023.03.23 |