외래키(foreign key)
references
create table employee(
eno number,
ename varchar2(10),
deptno number references dept(deptno)
);
이렇게 테이블을 짜면 dept라는 테이블의 deptno 외의
값이 들어가면 무결성 제약조건에 위배되어
insert를 할 수 없다.
dept를 부모 테이블 deptno를 부모키
employee를 자식 테이블
imployee의 deptno를 자식키 혹은 외래키라고 부른다.
이때 부모키는 꼭 기본키 혹은 고유키여야한다.
(primary key 혹은 unique)
자식 레코드의 자식키에 사용된 부모키는
무결성 제약조건에 위배되어 삭제할 수 없다.
원만하게 삭제해주기 위해선 자식키를 생성할 때
on delete set null 를 붙여준다.
(부모키 해당 부분 삭제시 null로 설정)
on delete cascade
(부모키 해당 부분 삭제시 같이 삭제)
on delete 세팅을 하지 않고 부모키를 지우려면
drop table dept cascade constraints;
를 통해 삭제할 수 있다.
(자식이 참고하는 부모키가 있어도 테이블을 지우겠다는 뜻)
create table employee(
eno number,
ename varchar2(10),
deptno number references dept(deptno) on delete set null
);
[제약조건]
primary key
not null
unique
check
forign key
default
dml - select, insert, update, delete
(테이블 내의 정보 삽입 수정등)
ddl - create,alter,drop,rename,turncate (ddl은 무조건 자동커밋된다.)
(테이블 생성 정의 등)
dcl - grant,revoke (권한 부여 회수)
PLSQL : Procedural Languege SQL
절차 지향적 언어로 구성된 SQL
시작시
set severoutput on
declare -선언
x number; -x 변수 선언
begin -시작
x := 100; -x변수에 100을 넣는다
dbms_output.put('값='||x); -- java의 print.
dbms_output.put_line('값='||x); -값= + x 출력
dbms_output.put('값='||x); --마지막은 _line으로 끝내야하므로
출력되지 않는다.
end; -끝
sql 내의 메소드를 사용할 수 있다.
declare
x number;
y number;
z number;
name varchar2(10);
addr varchar2(10);
begin
x := 10;
y :=20;
z := x+y;
DBMS_OUTPUT.PUT_LINE('결과:'||z||'입니다');
DBMS_OUTPUT.PUT('결과:'||(x+y)||'입니다'||chr(10));
chr(10): 엔터의 아스키 코드값.
DBMS_OUTPUT.PUT_LINE('몫:'||round(12/7)||'입니다');
DBMS_OUTPUT.PUT_LINE('몫:'||floor(12/7)||'입니다');
DBMS_OUTPUT.PUT_LINE('나머지:'||mod(12,7)||'입니다');
DBMS_OUTPUT.PUT(1);
DBMS_OUTPUT.PUT_LINE(2);
name := '김연아';
addr := '서울';
dbms_output.put_line('이름은 '||name||', 주소는 '||addr||'입니다.');
end;
테이블 호출해서 정보 추출
declare
vname varchar2(12);
vposition varchar2(12);
vsalary number; --테이블 담을 변수
begin
-- select~ into는 조건이 하나만 있는 행이어야 한다
select name,position,salary --테이블 칼럼
into vname,vposition,vsalary
from company --테이블 명
where sabun=3; -- 위치 선정
DBMS_OUTPUT.put_line(vname||','||vposition||','||vsalary);
end;
PLSQL로 레코드 추가하기
/
declare
vno number;
vname varchar2(10) :='슬기';
vaddr varchar2(10) := '부산';
begin
vno :=6;
insert into customer
values(vno,vname,vaddr);
end;
/
PLSQL로 입력값을 받아 레코드 추가하기
&~ : 입력 명령어
declare
vno number := '&no';
vname varchar2(10) :='&name';
vaddr varchar2(10) := '&addr';
begin
insert into customer
values(vno,vname,vaddr);
end;
축약(변수 선언 declare 파트 없이)
begin
update consumer
set c_name='&name',c_price='&price'
where code='&code';
end;
PLSQL의 조건문
if 조건 then
처리할 문장1;
elsif 조건2 then
처리할 문장2;
else
처리할 문장3;
end if;
declare
x number:=2;
result varchar2(10);
begin
if x=1 then
result :='one';
elsif x=2 then
result :='two';
elsif x=3 then
result := 'three';
else
result :='그 밖의 수';
end if;
dbms_output.put_line('result: '||result); -- result: two
end;
응용
declare
vsabun number :='&sabun';
vname varchar2(10);
vdeptno number;
vdept varchar2(10);
begin
select name,deptno
into vname,vdeptno
from company
where sabun=vsabun;
if vdeptno=10 then
vdept :='인사부';
elsif vdeptno=20 then
vdept :='개발부';
elsif vdeptno=30 then
vdept :='홍보부';
else
vdept :='없는 부서';
end if;
dbms_output.put_line('사번 : '||vsabun||' 이름 : '||vname||' deptno : '||
vdeptno||' 부서명 : '||vdept);
end;
'Develop > Oracle SQL DATABASE' 카테고리의 다른 글
0620 Oracle SQL 7일차 기본 마무리 (0) | 2022.06.20 |
---|---|
0615 Oracle SQL 4일차~ (0) | 2022.06.15 |
0614 Oracle SQL 3일차! (0) | 2022.06.15 |
0613 Oracle SQL 2일차 (0) | 2022.06.15 |
0610 Oracle SQL DATABASE 첫 수업 (0) | 2022.06.10 |