본문 바로가기

DB & ORM/Oracle

[Oracle] 프로시저 정리

https://www.mkyong.com/oracle/oracle-stored-procedure-select-into-example/ 참조


http://www.gurubee.net/lecture/1041 참조


프로시저(Procedure)란?

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

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

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


1. Table SQL Script

DBUSER table creation script.

CREATE TABLE DBUSER (
  USER_ID       NUMBER (5)    NOT NULL,
  USERNAME      VARCHAR2 (20)  NOT NULL,
  CREATED_BY    VARCHAR2 (20)  NOT NULL,
  CREATED_DATE  DATE          NOT NULL,
  PRIMARY KEY ( USER_ID )
 )


※ 테이블에 데이터 넣기. USER_ID 1001 로


2. Stored Procedure

A stored procedure, uses SELECT INTO mechanism to assign the matched values to OUT parameters.

CREATE OR REPLACE PROCEDURE getDBUSERByUserId(
	   p_userid IN DBUSER.USER_ID%TYPE,
	   o_username OUT DBUSER.USERNAME%TYPE,
	   o_createdby OUT  DBUSER.CREATED_BY%TYPE,
	   o_date OUT DBUSER.CREATED_DATE%TYPE)
IS
BEGIN

  SELECT USERNAME , CREATED_BY, CREATED_DATE
  INTO o_username, o_createdby,  o_date
  from  DBUSER WHERE USER_ID = p_userid;

END;
/



3. Calls from PL/SQL

Call from PL/SQL like this :

DECLARE
   o_username DBUSER.USERNAME%TYPE;
   o_createdby DBUSER.CREATED_BY%TYPE;
   o_date DBUSER.CREATED_DATE%TYPE;
BEGIN

   getDBUSERByUserId(1001,o_username,o_createdby,o_date);

   DBMS_OUTPUT.PUT_LINE('username :  ' || o_username);
   DBMS_OUTPUT.PUT_LINE('createdby :  ' || o_createdby);
   DBMS_OUTPUT.PUT_LINE('createddate :  ' || o_date);

END;
/



※ 주의사항


컴파일이 실패하면 프로시저를 실행하면 안됨. 실행이 안됨.


컴파일이 완료된 이후 바로 프로시저를 호출해야함. 그래야 실행이 된다.


그리고 프로시저가 실행된 이후 익명 블록이 완료되었다고 뜨고 출력이 안뜨면


show serveroutput; 을 쳐서 output 옵션을 on 으로 해야함.

set serveroutput on