Oracle PL/SQL 강좌
프로시저(PROCEDURE) 39 48 99,999+

by 구루비 프로시저 PROCEDURE IN OUT INOUT EXECUTE [2002.01.20]


프로시저(Procedure)란?

  특정 작업을 수행 하는, 이름이 있는 PL/SQL BLOCK 이다.

  매개 변수를 받을 수 있고, 반복적으로 사용 할 수 있는 BLOCK 이다.

  보통 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL BLOCK을 데이터베이스에 저장하기 위해 생성 한다.

프로시저 문법

 
CREATE OR REPLACE procedure name 
   IN argument 
   OUT argument 
   IN OUT argument 

IS 

   [변수의 선언]

BEGIN  --> 필수 

   [PL/SQL Block] 
   -- SQL문장, PL/SQL제어 문장 

   [EXCEPTION]  --> 선택
  -- error가 발생할 때 수행하는 문장

END;  --> 필수 
    
  • - CREATE OR REPLACE 구문을 사용하여 생성 한다.
  • - IS 로 PL/SQL의 블록을 시작 한다.
  • - LOCAL 변수는 ISBEGIN 사이에 선언 한다.

프로시저 작성 예제

-- 프로시저의 이름은 update_sal이다 
-- update_sal 프로시저는 사번을 입력받아 급여를 인상 한다. 
-- 프로시저를 끝마칠 때에는 항상 "/"를 지정 한다.
SQL> CREATE OR REPLACE PROCEDURE update_sal 
     /* IN  Parameter */
     (v_empno    IN    NUMBER) 
         
     IS 

     BEGIN 

       UPDATE emp 
       SET sal = sal  * 1.1 
       WHERE empno = v_empno; 

       COMMIT; 

     END update_sal; 
     /     
    

프로시저 실행 예제

EXECUTE 문을 이용해 프로시저를 실행 한다.

SQL> EXECUTE update_sal(7369);
PL/SQL 처리가 정상적으로 완료되었습니다.

-- 7369번 사원의 급여가 10% 인상 되었는지 확인해 보기 바란다.
    

- 강좌 URL : http://www.gurubee.net/lecture/1041

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by ben337 [2005.11.30 13:56:49]
어떤 의도에서 질문하신 건지 정확히는 모르겠지만, 새로 프로시져 하나 만들어서
원하는 프로시져 call하고 실행 후, 밖에서 commit 하면 될 듯 싶네요.

by 도치세상 [2006.01.18 11:38:37]
그대로 sql plus 에서 해봤는데요 식별자가 정의되어야 한다는데 프로시져 이름도 어떠한 규칙이 있나요?

by shwan [2006.03.15 14:42:21]
자바소스에서 프로시져를 호출해서 프로시져가 정상적으로 실행한후 메세지를 자바소스로 리턴해서 볼수 있는 방법좀 가르쳐 주세요.

by 김정식 [2006.03.16 08:04:27]
네이버에서 Callablestatement로 검색해 보세요..
OUT 파라미터를 이용해서 메세지를 리턴받으면 될꺼 같네요.

by 시근땀 [2006.03.21 10:37:06]
김정식님 감사합니다.
강좌 정말 잘 보고 있어요.

by dreamup [2006.04.13 08:56:28]
프로시져 호출시에 "프로시져명( 변수명 => 변수명)" 이런 형식이 있던데요
어떻게 사용하는건가요. -_-a
그리고 운영자님 정말 훌륭한 일을 하고 계십니다
초보에게 도움이 무진 많이 되네요 ^^;
무슨일 하시는지 정말 궁금합니다

by 한심이 [2006.06.12 11:31:52]
EXECUTE UPDATE_SAL
ORA-20004: syntax error attempting to parse "SCOTT.EXECUTE UPDATE_SAL"
ORA-06512: at "SYS.DBMS_DESCRIBE", line 87
ORA-00911: invalid character
ORA-06512: at line 1

이렇게 나오네요......ㅠ.ㅠ

by 고라파독 [2006.06.26 11:28:42]
파라미터를 넣지 않으셔서 그런 듯 한데요?
SQL> Execute Update_Sal(111);
이런 식으로요 ^^;;

운영자님 너무 감사합니다.
SQL만 하다가 처음 Oracle 공부하는 중인데 아주 잘 보고 있습니다. ^^*

by 체리세이지 [2006.08.17 10:50:57]
전 컴파일오류와 함께 프로시저가 생성되었다구..뜨더니 실행시키니까..
ora-06550:줄 1, 열7:pls-00905:scott.update_sal 오브젝트가 부당합니다
ora-06550:줄 ,1 열7:pl/sql:statement ignored
라고 뜨는데용...

by 미링 [2006.08.29 16:15:20]
ORANGE를 사용하는데요,,
테이블명을 대문자로 주지않음 오류가 발생합니다.
ex)Execute UPDATE_SAL(111);

by 고급인력 [2006.08.29 21:36:26]
아자아자

by 궁금이 [2006.10.11 11:00:08]
CREATE OR REPLACE PROCEDURE LAB_PLSQL.sel_table
(p_tablename IN varchar2)
IS
BEGIN
SELECT * from p_tablename;
END sel_table;

이런식으로 테이블이름을 변수로 받아서 조회를 하려면 어떤 방법을 이용해야 합니까?

by 붕어알 [2006.11.20 19:30:03]
하나의 프로시져안에 이미 저장되어있는 또다른 프로시저나 함수를 사용할수 있는지 궁금합니다.
한마디로 중첩 프로시져나 함수가 가능한지요?

by 손님 [2006.11.21 15:42:57]
프로시저에서 함수나 또 다른 프로시저 불러다 쓰는거 됩니다

by 쉰 [2006.12.26 19:36:23]
이거 toad7 에서도 정상적으로 실행되나요??
프로시저 생성이 안되는거 같은데..ㅠㅠ

by 현 [2006.12.27 10:20:37]
토드에서는 SQL EDITOR에서 하시지 마시고 PROCEDURE EDITOR에서 하시면 됩니다.
버전7은 잘 모르겠지만 아마 그럴껍니다...

by 5썬 [2007.01.29 14:50:55]
토드 8.6 사용중인 데 sql editor 에서 F5키를 누르니까 실행되네요

by 5썬 [2007.01.29 14:52:20]
물론 프로시저 컴파일은 procedure editor에서 하고요

by 퐁당 [2007.02.09 17:45:51]
식별자가 정의되어야 한다는게 대체 먼지..

by KKK [2007.03.07 10:56:42]
OUT과 INOUT는 어떤 경우에 사용되나요?

by 김동진 [2007.04.11 12:42:40]
아 정말 감사합니다. 강좌 유용하게 잘 공부하고 있습니다.

by 12 [2007.05.25 10:41:13]
ㅋㅋ

by 박정민 [2007.07.13 16:16:49]
show err 을 사용하면.. 에러가 어디서 왜 났는지에대해서 나오는군요..

by 박정민 [2007.07.13 16:17:14]
물론... SQL*PLUS에서요...

by loogie [2007.08.21 10:33:32]
토드에서 저장프로시저 실행...SQL EDITOR F5 정말 감사합니다...
계속 헤매고 있었습니다...ㅎㅎ

by 다솜여우 [2007.11.06 00:18:47]
열공하겠습니다~~고맙습니다.

by 김윤경 [2007.11.07 18:01:17]
좋은 공부가 되었어요^^;;

by 오렌지 [2008.02.15 10:17:57]
도움이 많이 됩니다 ㅠㅠ 감동

by 써니 [2008.04.13 23:35:31]
syntax에 PROCEDURE가 빠짐

by 멍텅이 [2008.04.23 14:16:29]
sql강의 create table... 만들고 insert...사용하니.. 되는군요.. ㅠㅠ
저같은 넘도 감동받으며 코딩할수 있어 기쁩니다.
감동.....

by 뽀대작살 [2008.12.04 16:46:50]
다른 책에서 보고 이해가 안되는 부분이였는데 이렇게 간단하게 정리된걸 보고 한방에 이해가 되내요..생유베리감사!

by 최인홍 [2008.12.08 11:43:11]
좋은 정보 감사합니다^^ 수고하세욧!

by 을이 [2009.07.07 15:36:38]
정말 여기 사이트는 초급이용자에게 너무 최고 ㅋㅋ

by 미친나비 [2009.12.30 08:17:04]
식별자가 정의되야 한다는건...아마도 제 생각엔 권한이 없으셔서 그런걸지도 모른다는 생각이 드네요..프로시저 실행시에 사용자는 Alter Procedure 권한이 필요합니다. 만약 다른 사용자가 생성한 프로시저라면 Alter any Procedure권한이 필요하구요 ^^

by 김민성 [2010.02.08 20:12:47]
Aqua Data Studio에서는 실행을 어떻게 하나요..
도스창에서는 실행되는데... 고수님들 부탁드립니다.

by 무대광풍 [2012.01.19 14:17:44]
sqlgate에서 사용시 PL/SQL Window 에서 사용해야 됩니다. --/

by 쫑 [2012.02.03 09:57:34]
in out은 둘다 할수 있다는 건가요 ??

by 돌이맹이 [2012.02.28 15:26:13]
return Type이 Cusor 일경우.. Commit을 마지막에 추가할수 없던데 방법을 못찾겠어요 ㅜ.ㅜ

by 열혈성민 [2013.01.18 12:16:45]

한눈에 쏙 들어오네요... @_@;;;

by 손님 [2013.04.02 13:54:51]

프로시저에 대한 개념이 조금 잡혓습니다
감사합니다


by 손님 [2013.04.15 18:40:21]

정말 좋은 공부가 되었습니다
프로시저가 너무 이해가 안됐었는데
감사합니다.

by 손님 [2013.04.15 18:41:51]

식별자가 정의 되어야 한다는건
테이블 작성시 만든 컬럼의 타입으로 정의를 해주어야 한다는 뜻입니다.
v_name in 테이블명.name%TYPE 이런식으로요 한번 해보세요

by 요타바이트 [2014.07.21 10:27:28]

잘보고 갑니다.


by 회원가입 [2014.08.18 17:36:08]

감사합니다!


by 다말이야 [2014.09.04 11:21:03]

procedure안에서는 create 문 사용 불가인가요?!ㅜ

혹시 procedure를 돌리면서 view를 생성할수 있는 방법이 있을까요?!

도움 부탁드립니다


by 돼지가웃통벗는날 [2018.01.17 14:46:24]

쉽게 이해가 가네요 정말 감사합니다!


by 최한성 [2018.08.19 13:50:52]

오래전 강의지만 이해가 잘됩니다. 

프로시저로 HELLO 찍어 본거네요 ㅎ


by 일우입니담 [2019.12.17 22:16:59]

너무 도움이 되었습니다! 제 블로그에 퍼가고 싶은데 블로그 주소 남기면 될까요?! https://blog.naver.com/loveelf1? 입니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입