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
'DB & ORM > Oracle' 카테고리의 다른 글
[ORACLE] dummy 데이타 생성 (특정 테이블 기준) (0) | 2017.04.21 |
---|---|
[Oracle] Varchar 컬럼에 데이트 형태 넣기 (년월일시분초) (0) | 2017.03.30 |
[Oracle] 열의 정의가 애매합니다. (0) | 2017.01.25 |
[Oracle] Set module 정리 (0) | 2017.01.16 |
Oracle comparing timestamp with date (0) | 2016.08.05 |