DB & ORM/Oracle
[Oracle] 프로시저 정리
무대포개발자
2017. 1. 16. 10:54
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