목록DB (44)
nickjoIT
DECLARE --명시적 커서 선언(매개변수 전달) CURSOR c1(p_deptno NUMBER, p_job VARCHAR2) IS SELECT * FROM emp WHERE deptno=p_deptno AND job=p_job; --커서 c1과 같은 레코드 타입 선언 emp_rec c1%ROWTYPE;BEGIN --방법1. 커서 OPEN, LOOP, FETCH, CLOSE를 이용한 데이터 추출 --커서 오픈(매개변수 전달) OPEN c1(30,'SALESMAN'); --커서 내 데이터 반복 추출 LOOP --커서 결과를 c1%ROWTYPE 변수에 입력 FETCH c1 INTO emp_rec; --커서 내 추출 데이터가 없을 경우 LOOP 빠져나감 EXIT WHEN c1%NOTFOUND; --데이터 처..
CREATE OR REPLACE FUNCTION get_ename_func(p_empno NUMBER)RETURN VARCHAR2IS --명시적 커서 선언 CURSOR c1 IS SELECT ename FROM emp WHERE empno=p_empno; l_ename emp.ename%TYPE; BEGIN --커서 오픈 OPEN c1; --데이터 추출 후 INTO 절 안의 변수에 입력 FETCH c1 INTO l_ename; --추출 결과 건수가 0일 경우 IF c1%NOTFOUND THEN l_ename := NULL; END IF; --커서 닫기 CLOSE c1; RETURN l_ename;END;/
DECLARE --부서별 사원 정보를 추출하는 커서 선언 CURSOR emp_cursor(p_deptno NUMBER) IS SELECT ename,empno FROM emp WHERE deptno=p_deptno;BEGIN --커서 결과 건수만큼 LOOP가 수행됨 --emp_cursor 커서에 10번 부서로 조회하여 emp_rec 레코드 변수에 저장 FOR emp_rec IN emp_cursor(10) LOOP --emp_rec 레코드의 값을 출력. 레코드.칼럼 이름으로 출력 DBMS_OUTPUT.PUT_LINE('EMP NAME:' || emp_rec.ename); DBMS_OUTPUT.PUT_LINE('EMP EMPNO:' || emp_rec.empno); END LOOP;END;/---------..
DECLARE l_ename VARCHAR2(20);BEGIN FOR i IN 1..20 LOOP SELECT NVL(MAX(ename),'NULL') INTO l_ename FROM emp WHERE empno=7899+i; DBMS_OUTPUT.PUT_LINE('ENAME:' || l_ename || ', i:' || i); END LOOP;END;/--------------------------------------------------------DECLARE l_ename VARCHAR2(20); BEGIN --역순으로 읽고자 할 경우 FOR i IN REVERSE 1..20 LOOP SELECT NVL(MAX(ename),'NULL') INTO l_ename FROM emp WHERE empno..
DECLARE l_cnt NUMBER := 0;BEGIN WHILE l_cnt
--기본 LOOPDECLARE l_cnt NUMBER := 1;BEGIN LOOP EXIT WHEN l_cnt >= 100; DBMS_OUTPUT.PUT_LINE('cnt: ' || l_cnt); l_cnt := l_cnt + 1; END LOOP;END;/----------------------------------------------------------------------중첩 LOOPDECLARE --subtype을 이용한 새로운 변수 타입 설정 SUBTYPE count_type IS NUMBER(3); l_cnt count_type NOT NULL := 0;BEGIN --goto 활용을 위한 outer 레이블 설정 LOOP DBMS_OUTPUT.PUT_LINE('outer loop1'); --..
--IF문DECLARE l_sales NUMBER := 2500; l_bouns NUMBER := 0;BEGIN IF l_sales >= 3000 THEN l_bouns := 300; ELSIF l_sales >= 2000 THEN l_bouns := 200; ELSE l_bouns := 100; END IF; DBMS_OUTPUT.PUT_LINE('BOUNS: ' || l_bouns);END;/---------------------------------------------------------------------------------------------------------------------------CASE문DECLARE salary NUMBER := 1000; l_out VARCHAR2(2..
CREATE OR REPLACE FUNCTION get_avg_func(p_deptno NUMBER)RETURN NUMBERIS l_result NUMBER := 0;BEGIN SELECT AVG(sal) INTO l_result FROM emp WHERE deptno=p_deptno; RETURN l_result; END;/ ----------------------------------------------------------------------------------------------------------------함수실행SELECT ROUND(get_avg_func(10),2) FROM DUAL;
DROP PROCEDURE procedure_name;
--프로시저 선언CREATE OR REPLACE PROCEDURE emp_count(p_deptno IN NUMBER default 20, --프로시저 입력변수o_emp_count OUT NUMBER) --프로시저 출력변수IS--커서 선언CURSOR get_emp_data IS SELECT COUNT(*) FROM emp WHERE deptno=p_deptno; l_count NUMBER;BEGIN --커서 오픈 OPEN get_emp_data; --커서 FETCH FETCH get_emp_data INTO l_count; --출력 변수에 값 입력 o_emp_count := l_count; --커서 CLOSE CLOSE get_emp_data;END emp_count;/ ------------------..