ITGenerations
2018_05_11 디비 수업자료 본문
-- 유형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;
'Univ > 디비' 카테고리의 다른 글
오라클로 배우는 데이터베이스 개론과 실습 연습문제 4장 (0) | 2018.05.24 |
---|---|
오라클로 배우는 데이터베이스 개론과 실습 연습문제 5장 (1) | 2018.05.24 |
중간고사 (0) | 2018.05.04 |
디비 연습문제 (0) | 2018.04.20 |
오라클 데이터베이스 기본 개념 요약 정리 (0) | 2018.04.16 |