본문 바로가기

Database/DB

sql 프로시져 만들기 도전~!

오라클 책 100페이지도 나가기 전에 개발하는데 프로시져를 너무 많이 써서 대체 뭐길래 이렇게 쓰나~
호기심으로 했다가..하루를..-0- 복수행 함수도 못쓰는 사람이 이런걸 건드니 당연한 결과일지도.
(C로 치면 이제 구구단 짜는 사람이 mfc로 프로그램을 만들려는것과 같은거..)

어쟀든 간단한 프로시져 하나를 만들어서 돌려보는게 목적!
프로세서는 number 을 받아서 +1 를 해줘서 내보내주는 간단한 프로시져이다.

먼저 프로시져를 만들려면 몇가지 구문 규칙이 있는데

create or replace procedure 프로시져 이름 ( 파라미터 1, 파라미터 2, ....)
is
BEGIN
실행부;
[EXCEPTION
  예외처리부;]
END [프로시져 이름];

위와 같이 구성이 된다.

먼저 create or replace 는 만들수도 있고~ 고칠수도 있다는 명령어입니다.
procedure 는 작성하는것이 프로시져입을 알려주는거고요.
실질적으로 값을 받고 내보내는 파라미터(그동안 짜오던 함수와 틀리더군요;; 내보내는 파라미터값이 여러개 일수도 있고, 입력파라미터 옆에 쓰는 당혹스럼;;)를 지나 is 부터 본격적으로 시작하는 부분입니다.
is와 BEGIN 사이엔 파라미터의 값을 내보내거나 받는 변수들을 선언할수 있습니다.
BEGIN 부터는 원하는 계산식, 쿼리문을 집어넣으시면 됩니다.

일단 위에서 말한대로 간단하게 만든 프로시져(hui 는 계정이름입니다.)

create or replace procedure hui.sum1(inum in number, onum out number)
is
n_onum           number(10) ;
begin

select inum +1
into n_onum 
from dual;
onum := n_onum ;

end;

is 와 begin 사이에 변수 하나를 선언했습니다. select 에서 얻은 결과값을 집어넣는 변수입니다.
selelct 에서 파라미터 inum 에서 받은 변수에 +1를 한다음 n_onum 변수에 집어 넣습니다.
그리고 onum := n_onum 에서 onum으로 집어 넣어주는거죠.


성공적으로 생성되었습니다! 만일 오타가 있거나 문법에 맞지 않는다면 컴파일 오류와 프로시저가 생성되었습니다. 라는 경고 메시지가 뜰겁니다.(정작 어디가 에러인지는 안알려주는군요..ㅜㅡㅜ 이래서 토드로 개발해야하나봅니다.)

이제 실행을 해봐야겠쬬?

출력값이 있으므로 변수하나를 출력해서 그곳에 담아야 합니다.
variable y number;
exec sum1(1, :y);

y 라는 넘버 타입의 변수를 하나 생성했고 프로시져에서 out에 해당하는 파라미터 변수로 집어 넣었습니다.
에러가 없다면 PL/SQL 처리가 정상적으로 완료되었습니다. 라는 메시지가 뜰겁니다.
하지만 y의 결과값이 나오지 않는데 이때 명령어 print 를 쓰시면 됩니다.

print y;
하지면 변수 y에 들어간 값을 출력하게 됩니다.



'Database > DB' 카테고리의 다른 글

두개의 테이블에 동시에 값 넣기.  (0) 2011.01.04
간단한 join 문제  (1) 2010.12.27
java.sql.SQLException: ORA-01002  (0) 2010.10.26
오라클 설치시 에러! javaw.exe  (24) 2010.10.24
Toad Extension Eclipse plugins  (0) 2010.10.08