국비 28일차_1

강지수·2024년 1월 23일
0

국비교육

목록 보기
54/97

지난 시간 복습


시퀀스 적용 미션
addrmemo 테이블에 번호(ano) 이름(aname) 주소(addr) 전화번호(atel)
번호에 시퀀스 적용 (ano_seq)
데이터 5개 정도 적용

create table addrmemo(ano number, aname varchar2(300), addr varchar2(300), atel varchar2(300));
create sequence addrmemo_ano_seq increment by 1 start with 1 maxvalue 100 minvalue 1 cycle cache 2;
select * from addrmemo;
/
begin
    for i in 1..100 loop
        insert into addrmemo values(addrmemo_ano_seq.nextval,'강지수','addr','tel');
    end loop;
end;
/


PL / SQL

PL : Procedural Language

PL/SQL : Oracle's Procedural Language extension to SQL



강의자료



간단히 설명한 Procedure 의 구조



프로시져 실행됨

bit data3,hong3 이 스크립트에 출력됨
set serveroutput off; 하면 출력 안됨


미션
emp Table에 적용
8000 n TOM v ANALYST v 7839 n 오늘날짜 3500 n 500 n 20 n 삽입
n : number / v : varchar2


procedure 로 update 하기


extract 를 사용하면 hire_date 에서 year 만 추출 가능


활용하면 이렇게 조건으로 줄 수도 있다.


-- Procedure 1
/
create or replace procedure yearselect(
    p_year number
)
is
-- 변수 선언
    id employees.employee_id%TYPE;
    name employees.last_name%TYPE;
    hiredate employees.hire_date%TYPE;
begin
    select employee_id,last_name,hire_date into id,name,hiredate from employees where extract(year from hire_date)=p_year;
    dbms_output.put_line(id ||','|| name ||','|| hiredate);
end;
/
exec yearselect(2001);
-- 현재는 결과가 1행일 때만 가능

이 procedure는 조건에 맞는 결과가 1개라서 (row 가 1개라서) 실행가능


-- Procedure 2
/
create or replace procedure yearselect(
   p_year number
)
is
-- Table 의 Type 을 전부 가져오기
   emp employees%ROWTYPE;
-- 커서 등록
   cursor emp_cur is select employee_id,last_name,hire_date from employees where extract(year from hire_date)=p_year;
begin
   open emp_cur;
   loop
-- 데이터 읽기
       fetch emp_cur into emp.employee_id,emp.last_name,emp.hire_date;
       exit when emp_cur%notfound;
       dbms_output.put_line(emp.employee_id ||','|| emp.last_name ||','|| emp.hire_date);
   end loop;
   close emp_cur;
end;
/
exec yearselect(2003);

커서와 반복문을 이용해서 여러 줄의 내용도 실행 가능


Alter

alter : Data Table 구조 관련 명령, Data 구조를 정의할 때 사용 (생성,변경,삭제, 이름 변경)


테이블 이름 변경


칼럼 추가


칼럼 삭제


칼럼 이름 변경


칼럼 타입 변경

칼럼 타입을 변경하려면 값이 전부 없어야 한다.


Subquery 연습

from, select 에도 subquery 사용 가능


Procedure 안에서 if 문 사용


Procedure 안에서 case 문 사용


Procedure 안에서 loop 문 사용


Procedure 안에서 while 문 사용


Procedure 안에서 for 문 사용


Procedure 안에서 exception 문 사용 (예외발생)


-- join 보충
-- 테이블 3개
create table student2(no number, name varchar2(15), subject_id number, score number);
create table grade(grade char(4), min_score number, max_score number);
create table subject(subject_id number, subject_name varchar2(30));

insert into subject values(10,'Computer Enginnerring');
insert into subject values(20,'Music');
insert into subject values(30,'English');
insert into subject values(40,'History');
insert into subject values(50,'Math');
commit;
insert into student2 values(1000,'James',10,98);
insert into student2 values(1001,'Ford',10,91);
insert into student2 values(1002,'Allen',20,89);
insert into student2 values(1003,'Steve',30,83);
insert into student2 values(1004,'Miller',40,78);
commit;
insert into grade values('A+',96,100);
insert into grade values('A0',90,95);
insert into grade values('B+',86,89);
insert into grade values('B0',80,85);
insert into grade values('C+',76,79);
insert into grade values('C0',70,75);
insert into grade values('D+',66,69);
insert into grade values('D0',60,65);
insert into grade values('F',0,64);
commit;

select * from student2;
select * from grade;
select * from subject;


Equip join

equip join (등가조인)

select s.name, b.subject_name from student2 s join subject b on s.subject_id=b.subject_id;


3개의 Join

select s.name, b.subject_name, s.score, g.grade from student2 s join subject b on s.subject_id=b.subject_id join grade g
on s.score between g.min_score and g.max_score;

Ansi Join Style


select s.name, b.subject_name, s.score, g.grade from student2 s, subject b, grade g 
where s.subject_id=b.subject_id and s.score between g.min_score and g.max_score;

Oracle Join Style


오전은 여기까지

profile
개발자 준비의 준비준비중..

0개의 댓글