«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ITGenerations

2018_05_11 디비 수업자료 본문

Univ/디비

2018_05_11 디비 수업자료

ITGenerations 2018. 5. 11. 11:43


-- 유형2 IF ~ THEN ~ELSIF ~ END IF 문장 ( 조건이 여러개 일 경우 사용)


--IF (조건) THEN

--실행문장;

--ELSIF(조건) THEN

--실행문장

--ELSIF(조건) THEN

--실행문장

--END IF;


-- CASE조건문

-- 예


--SET VERIFY OFF

--DECLARE

--        V_EMPID EMPLOYEES.EMPLOYEE_ID%TYPE;

--        V_FNAME EMPLOYEES.FIRST_NAME%TYPE;

--        V_DEPID EMPLOYEES.DEPARTMENT_ID%TYPE;

--        V_DNAME VARCHAR2(20);

--        

--BEGIN

--        SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID

--            INTO V_EMPID, V_FNAME, V_DEPID

--        FROM EMPLOYEES

--        WHERE EMPLOYEE_ID = &EMPID;

--        V_DNAME := CASE V_DEPID

--            WHEN 10 THEN 'ADMINISTRATION'

--            WHEN 20 THEN 'MARKETING'

--            WHEN 30 THEN 'PURCHASING'

--            WHEN 40 THEN 'HUMAN RESOURCES'

--        END;

--        

--        DBMS_OUTPUT.PUT_LINE(V_EMPID||'--'||V_FNAME||'--'||V_DEPID||'--'||V_DNAME);

--END;


----변수 지정

--DECLARE

--        NOL NUMBER := 0;

--BEGIN

--        LOOP

--            DBMS_OUTPUT.PUT_LINE(NOL);

--            NOL := NOL +1;

--            EXIT WHEN NOL >5;

--        END LOOP;

--END;

--

----사용자 입력방법

--DECLARE

--        NOL NUMBER := &NOL;

--BEGIN

--        LOOP

--            DBMS_OUTPUT.PUT_LINE(NOL);

--            NOL := NOL +1;

--            EXIT WHEN NOL >5;

--        END LOOP;

--END;



---- SUM 구하기

--DECLARE

--        NOL NUMBER := 0;

--        SUMS NUMBER := 0;

--BEGIN

--        LOOP

----            DBMS_OUTPUT.PUT_LINE(NOL);

--            DBMS_OUTPUT.PUT_LINE(SUMS);

--            SUMS := SUMS +NOL;

--            NOL := NOL +1;

--            EXIT WHEN NOL >5;

--            EXIT WHEN SUMS >10;

--        END LOOP;

--END;



----WHILE

--DECLARE

--        NOL NUMBER := 0;

--BEGIN

--        WHILE NOL < 6 LOOP

--            DBMS_OUTPUT.PUT_LINE(NOL);

--            NOL := NOL +1;

--        END LOOP;

--END;



----FOR

--BEGIN

--    FOR I IN 0 .. 5 LOOP

--    

--    DBMS_OUTPUT.PUT_LINE(I);

--    END LOOP;

--END;



--FOR COUNTER IN [REVERSE] START .. END

--LOOP

--    STATEMENT1;

--    STATEMENT2;

--END;



-- 5단 구구단

SET SERVEROUTPUT ON;

DECLARE

    DAN NUMBER :=5;

    I NUMBER :=1;

    

BEGIN

    LOOP

    DBMS_OUTPUT.PUT_LINE(DAN||'*'||I||'='||(DAN*I));

    I := I+1;

    IF I>9 THEN

        EXIT;

    END IF;

    END LOOP;

END;


-- 오라클에서 ||은 자바에서 + 의 의미와 같다 연결의 의미






오라클에서 기본적으로 제공하는 공부 

접속이름 testDB / 사용자 이름 hr 비밀번호 hr / SID는 orcl

허가권 때문에 cmd 창에서 sqlplus sys/oracle as sysdba 입력

엔터 후 아래 sql>에 alter user hr identified by hr account unlock; 입력 후 sqldeveloper에서 접속버튼

오늘은 sql에서 제공하는 언어 배우기  -> 자세한건 ppt보기, 책은 P. 256


--ppt **여기서 잠깐 ** 출력을 위해서는 맨 윗줄을 on으로 세팅(맨 처음에만) -> 화면 출력기능을 활성화

--BEGIN 이랑 END는 세트


SET SERVEROUTPUT ON;

BEGIN

    DBMS_OUTPUT.PUT_LINE('HELLO WORLD!');   -->문자열 작은따옴표로 묶기

END;


--DECLARE 선언부, BEGIN END 실행부

DECLARE

    VEMPNO NUMBER(4);  --스킬라 변수 선언, 자바에서 int형과 같이

    VENAME VARCHAR2(10);

BEGIN

    VEMPNO := 1001;  -->값을 넣는것 

    VENAME := '김사랑';

    DBMS_OUTPUT.PUT_LINE(' 사번      이름');

    DBMS_OUTPUT.PUT_LINE('--------------');

    DBMS_OUTPUT.PUT_LINE(' '||VEMPNO||' '||VENAME);  -->문자와 변수 이용||사용, 자바에서 +라고 생각

END;


--%TYPE으로 컬럼 단위로 찹조하여 레퍼런스 변수 선언 (위는 스칼라 변수 선언)

--VEMPNO EMP.EMPNO%TYPE -> EMP테이블의 EMPNO타입과 같은 타입으로 변수를 선언 하겠다.


--%ROWTYPE으로 로우 단위로 참조하여 레퍼런스 변수 선언

--VEMPNO EMP%POWTYPE  -> EMP테이블의 ROW타입, 행의 속성에 해당하는 타입을 다 가져오는거 예를들어 5개 속성 가져오면 .NAME이런 식으로 접근


--SELECT 문장 사용, Employees 테이블에서 employee_id가 200번인 사원의 사번과 이름 출력, 이 범위만 실행시켜야 함!!!!!아니면 위에 주석처리 해야함 /* */

SET SERVEROUTPUT ON;

DECLARE

    vno NUMBER(4);

    vname VARCHAR2(10);

BEGIN

    SELECT employee_id, first_name INTO vno, vname

    FROM employees

    WHERE employee_id = 200;

    DBMS_OUTPUT.PUT_LINE(vno||'  '||vname);

END;


--타입이용, Employees 테이블에서 employee_id가 197번인 사원의 사번과 salary출력

SET SERVEROUTPUT ON;   --없어도 실행되는듯

DECLARE

    v_empid employees.employee_id%TYPE;   --타입이 number라는 것을 테이블을 통해 확인가능

    v_salary employees.salary%TYPE;

BEGIN

    SELECT employee_id, salary INTO v_empid, v_salary

    FROM employees

    WHERE employee_id = 197;

    DBMS_OUTPUT.PUT_LINE(v_empid||' == '||v_salary);

END;


--입력받는거 실습

--Employees 테이블에서 employee_id가 197번인 사원의 사번과 salary출력 : &id를 통하여 값을 입력받음  -> 테이블에 있는 id값을 넣어야

DECLARE

    v_empid employees.employee_id%TYPE;   

    v_salary employees.salary%TYPE;

BEGIN

    SELECT employee_id, salary INTO v_empid, v_salary

    FROM employees

    WHERE employee_id = &id;

    DBMS_OUTPUT.PUT_LINE(v_empid||' == '||v_salary);

END;


--ROWTYPE변수를 활용하여 데이터 출력  -> EMPLOYEES테이블에 있는 모든 속성값을 가져오겠다는 뜻

DECLARE

    v_row employees%ROWTYPE;

BEGIN

    SELECT * INTO v_row   --> 한마디로 v_row를 하나의 배열처럼 생각하면 이해가 쉬움, .속성명으로 접근

    FROM employees

    WHERE employee_id = 180;

DBMS_OUTPUT.PUT_LINE(v_row.employee_id||'---'||v_row.first_name||'---'||v_row.salary);

END;


--사용자로부터 두 개의 숫자를 입력 받아서 합을 구해서 출력

DECLARE

    v_no1 NUMBER := &no1;    -->&기호는 입력 받겠다는 의미

    v_no2 NUMBER := &no2;

    v_sum NUMBER;

BEGIN

    v_sum := v_no1 + v_no2;

    DBMS_OUTPUT.PUT_LINE('첫번째 수: '||v_no1||', 두번째 수 : '||v_no2||', 합은 : '||v_sum||'입니다.');

END;


--제어문 사용해보기

--EMPLOYEES테이블에서 employee_id가 203번인 사원의 employee_id, first_name, department_id, dname출력

--DNAME의 값은 아래와 같다~~~~> 타이핑

DECLARE 

    vempid employees.employee_id%TYPE;

    vfname employees.first_name%TYPE;

    vdeptid employees.department_id%TYPE;

    vdname VARCHAR2(20);

BEGIN

    SELECT employee_id, first_name, department_id

    INTO vempid, vfname, vdeptid

    FROM employees

    WHERE employee_id = 203;

    

    IF(vdeptid = 10) THEN

        vdname := 'Administration';

    END IF;

    IF(vdeptid = 20) THEN

        vdname := 'Marketing';

    END IF;

    IF(vdeptid = 30) THEN

        vdname := 'Purchasing';

    END IF;

    IF(vdeptid = 40) THEN

        vdname := 'Human Resources';

    END IF;

    DBMS_OUTPUT.PUT_LINE(vempid||'--'||vfname||'--'||vdeptid||'--'||vdname);

END;


--if는 무조건 검사, else if는 해당되는거 만나면 그만 검사  --> 위를 elsif문으로 변경(더 빠른 속도)

DECLARE 

    vempid employees.employee_id%TYPE;

    vfname employees.first_name%TYPE;

    vdeptid employees.department_id%TYPE;

    vdname VARCHAR2(20);

BEGIN

    SELECT employee_id, first_name, department_id

    INTO vempid, vfname, vdeptid

    FROM employees

    WHERE employee_id = 203;

    

    IF(vdeptid = 10) THEN

        vdname := 'Administration';

    ELSIF(vdeptid = 20) THEN

        vdname := 'Marketing';

    ELSIF(vdeptid = 30) THEN

        vdname := 'Purchasing';

    ELSIF(vdeptid = 40) THEN

        vdname := 'Human Resources';

    END IF;

    DBMS_OUTPUT.PUT_LINE(vempid||'--'||vfname||'--'||vdeptid||'--'||vdname);

END;


--CASE 조건문

SET verify OFF  --치환하려면 필요, 아마 한번만 입력해주면 되는듯 맨위 SET SERVEROUTPUT ON;처럼...?

DECLARE 

    v_empid employees.employee_id%TYPE;

    v_fname employees.first_name%TYPE;

    v_deptid employees.department_id%TYPE;

    v_dname VARCHAR2(20);

BEGIN

    SELECT employee_id, first_name, department_id

    INTO v_empid, v_fname, v_deptid

    FROM employees

    WHERE employee_id = &empid;

    

    v_dname := CASE v_deptid

        WHEN 10 THEN 'Administration'

        WHEN 20 THEN 'Marketing'

        WHEN 30 THEN 'Purchasing'

        WHEN 40 THEN 'Human Resources'

    END;

    DBMS_OUTPUT.PUT_LINE(v_empid||'--'||v_fname||'--'||v_deptid||'--'||v_dname);

END;

    

--BASIC LOOP문, LOOP문을 사용하여 화면에 0부터 5까지 숫자를 출력

DECLARE

    no1 NUMBER := 0;

BEGIN 

    LOOP

        DBMS_OUTPUT.PUT_LINE(no1);

        no1 := no1 + 1;

        EXIT WHEN no1 > 5;

    END LOOP;

END;


--위의 예제 응용해서 값 입력받고, 9까지

DECLARE

    no1 NUMBER := &id;

BEGIN 

    LOOP

        DBMS_OUTPUT.PUT_LINE(no1);

        no1 := no1 + 1;

        EXIT WHEN no1 > 9;

    END LOOP;

END;


--위 응용해서 총합을 구해주는 변수 만들어주기DECLARE

DECLARE

    no1 NUMBER := &id;

    sum1 NUMBER := 0;

BEGIN 

    LOOP

         DBMS_OUTPUT.PUT_LINE(no1);  

        sum1 := sum1 + no1;

        no1 := no1 + 1;

        EXIT WHEN no1 > 9;

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('합 '||sum1);    

END;


--while문

DECLARE

    no1 NUMBER := 0;

BEGIN

    WHILE no1 < 6 LOOP

        DBMS_OUTPUT.PUT_LINE(no1); 

        no1 := no1 + 1;

    END LOOP;

END;


--FOR문

BEGIN

    FOR i in 0 .. 5 LOOP     --> 0..5는 0부터 5까지를 의미, 1씩 증가시킴

    

    DBMS_OUTPUT.PUT_LINE(i);

    END LOOP;

END;


--FOR문에서 반복횟수를 지정하기 위해 REVERSE

BEGIN

    FOR i in REVERSE 0 .. 5 LOOP    

    

    DBMS_OUTPUT.PUT_LINE(i);

    END LOOP;

END;


--5단 구구단 출력    -> 이런거 빈칸넣기 시험에 나올 수 있음 LOOP-END LOOP같은 짝꿍먼저 찾아주기

SET SERVEROUTPUT ON;

DECLARE 

    DAN NUMBER :=5;

    I   NUMBER :=1;

BEGIN

    DBMS_OUTPUT.PUT_LINE('5단');

    LOOP

    DBMS_OUTPUT.PUT_LINE(DAN||'*'||I||'='||(DAN*I));

    I := I+1;

    IF (I>9) THEN

        EXIT;

    END IF;

    END LOOP;

END;