인천일보아카데미/- 학습일지
[학습일지]JAVA교육일지 58일차
w1z
2022. 6. 28. 13:05
1. 프로시저의 매개변수
1. 프로시저의 매개변수
- 프로시저의 매개변수는 딱히 정의보다 예제로 어떤건지 파악하자.
[ 기본 사용 예제 ]
--매개변수 선언하기 예제
CREATE OR REPLACE PROCEDURE procTest(
width NUMBER, -- 매개변수선언
height NUMBER DEFAULT -- 매개변수에 기본값 저장 가능
)
IS
vresult NUMBER;
BEGIN
vresult := width * height;
DBMS_OUTPUT.PUT_LINE(vresult);
END procTest;
-- 출력하기 (선언한 매개변수에 값 입력)
BEGIN
procTest(100, 200);
END;
--> 20000
[ 매개변수 모드 ]
- 매개 변수의 값을 전달하는 방식
1) IN 모드(기본 모드) : 아무것도 지정 X
2) OUT 모드
3) IN OUT 모드(사용 안함)
- 예제)
CREATE OR REPLACE PROCEDURE procTest (
vnum1 IN NUMBER, -- vnum1 NUMBER랑 동일하다 ( 지정안해도 자동으로 IN 모드)
vnum2 IN NUMBER,
vresult1 OUT NUMBER, -- OUT MODE(주소값 참조변수)
vresult2 OUT NUMBER, -- OUT MODE(주소값 참조변수)
vresult3 OUT NUMBER -- OUT MODE(주소값 참조변수)
)
IS
BEGIN
result1 := vnum1 + vnum2;
result2 := vnum1 * vnum2;
result3 := vnum1 / vnum2;
END;
-- 출력하기( vresult에 매개변수 값을 넣기)
DECLARE
vsnum1 NUMBER;
vsnum2 NUMBER;
vsnum3 NUMBER;
BEGIN
procTest(10, 20, vsum1, vsum2, vsum3);
DBMS_OUTPUT.PUT_LINE(vsum1);
DBMS_OUTPUT.PUT_LINE(vsum2);
DBMS_OUTPUT.PUT_LINE(vsum3);
END;
----> 30
----> 200
----> 0.5
[ 매개변수 활용 예제 ]
-- 요구사항 예제1
-- 부서 지정 -> 부서 내에서 급여를 가장 많이 받는 직원의 이름을 반환
CREATE OR REPLACE PROCEDURE procTest (
pbuseo IN VARCHAR2,
pname OUT VARCHAR2
}
IS
vsalary NUMBER;
BEGIN
SELECT MAX(basicpay) INTO vsalary FROM tblInsa WHERE buseo = pbuseo;
SELECT NAME INTO pname FROM tblInsa WHERE basicpay = vsalary;
END procTest;
-- 출력하기
DECLARE
vname VARCHAR2(30);
BEGIN
procTest('개발자', vname);
DBMS_OUTPUT.PUT_LINE(VNAME);
END;
-- 요구사항 예제2
-- 직원번호 -> 같은 지역의 직원 수, 같은 직위의 직원 수, 같은 부서의 직원 수 반환
CREATE OR REPLACE PROCEDURE proTest(
pnum NUMBER, -- 직원 번호(IN)
pcn1 OUT NUMBER, -- 같은 지역
pcn2 OUT NUMBER, -- 같은 직위
pcn3 OUT NUMBER -- 같은 부서
)
IS
BEGIN
-- 같은 지역
SELECT COUNT(*) INTO pcn1 FROM TBLINSA
WHERE CIRY = (SELECT CITY FROM TBLINSA WHERE num,pnum);
-- 같은 직위
SELECT COUNT(*) INTO pcn2 FROM TBLINSA
WHERE JIKWI = (SELECT JIKWI FROM TBLINSA, pnum)
-- 같은 부서
SELECT COUNT(*) INTO PCNT1 FROM TBLINSA
WHERE BUSEO = (SELECT CITY FROM TBLINSA WHERE NUM = PNUM);
END procTest;
-- 출력하기
DECLARE
vcnt1 NUMBER;
vcnt2 NUMBER;
VCNT3 NUMBER;
BEGIN
procTest(1001, VCNT1, VCNT2, VCNT3;
DBMS_OUTPUT.PUT_LINE('같은 지역: ' || vcnt1);
DBMS_OUTPUT.PUT_LINE('같은 지역: ' || vcnt2);
DBMS_OUTPUT.PUT_LINE('같은 지역: ' || vcnt3);
END;
MEMO >
# 프로시저 매개변수 선언시 DEFAULT 활용이 가능하다.
--> 단, tset1 NUMBER test2 NUMBER 두 매개변수가 있을시 test1에는 DEFAULT 불가!!
--> WHY? ANSI-SQL방식이 아니라 PL/SQL 방식이기 때문이다.
--> DEFAULT는 맨 뒤 매개변수부터 채워나가야한다.
# 프로시저를 너무 어렵게 생각 NONO... 함수의 개념... 메소드의 개념......