DDL
오라클에서 제공하는 객체를 새로 만들고 (CREATE), 구조를 변경하고(ALTER), 구조자체를 삭제(DELETE)하는 언어 즉, 실제 데이터 값이 아닌 규칙 자체를 정의하는 언어를 DDL이라고 한다. 오늘 처음 실습하면서 뚝딱거리긴 했지만 손에만 익는다면 크게 복잡하진 않을 것 같다. 잊을만한 내용들만 정리하여 복기했다.
COMMENT ON COLUMN TB_RENT.RENT_NO IS '대여번호';

컬럼에 주석달기이다. 컬럼에 대한 부연 설명이 필요할 때 위와 같은 형식으로 코드를 작성하면 사진의 표시한 부분과 같이 '대여번호'라고 코멘트가 담겨있는 것을 볼 수 있다.
GENDER CHAR(3) CHECK(GENDER IN ('남','여'))
CHECK 조건식은 해당 컬럼에 들어올 수 있는 값에 대한 조건을 제시해줄 수 있다.해당조건에 만족하는 데이터값만 담길 수 있도록 해주는 명령문이다. 위와 같은 소스코드는 GENDER를 '남' 또는 '여' 만 입력이 가능토록 하고, 데이터를 추가할 때 이외의 답변은 오류가 뜬다.
삭제옵션
-부모테이블의 데이터 삭제시 그 데이터를 사용하고 있는 자식 테이블의 값을 어떻게 할것인가?
3가지의 경우의 수가 있는데,
1) ON DELETE RESTRICTED(기본값):삭제제한옵션, 자식데이터로부터 쓰이는 부모데이터는 삭제가 안 됨!
2) ON DELETE SET NULL: 부모데이터 삭제시 해당 데이터를 사용하고 있는 자식 데이터의 값을 NULL로 변경
3) ON DELETE CASCADE: 부모데이터 삭제시 해당 데이터를 사용하고 있는 자식데이터도 모두 삭제.
그리고 오늘 1시간동안 끙끙 앓던 부분이 있었다. ORA-00907: 누락된 우괄호인데,
CREATE TABLE TB_MEMBER(
MEMBER_NO NUMBER CONSTRAINT MEMBER_PK PRIMARY KEY,
MEMBER_ID VARCHAR2(20) CONSTRAINT MEMBER_UQ_ID UNIQUE,
MEMBER_PWD VARCHAR2(30) CONSTRAINT MEMBER_NN_PWD NOT NULL,
MEMBER_NAME VARCHAR2(20) CONSTRAINT MEMBER_NN_NAME NOT NULL,
GENDER CHAR(1) CONSTRAINT MEMBER_CK_GEN CHECK(GENDER IN ('M','F')),
ADDRESS VARCHAR2(100),
PHONE CHAR(13),
STATUS CHAR(1) CONSTRAINT MEMBER_CK_STA CHECK(STATUS IN('N','Y')) DEFAULT 'N' ,
ENROLL_DATE DATE CONSTRAINT MEMBER_NN_EN NOT NULL DEFAULT SYSDATE
);
처음엔 위와 같이 코드를 작성하였었다. 표현법도 잘 적고 제약조건도 문제없이 적었고, 오타도 없고 오류코드도 누락된 우괄호인데 아무리 눈 씻고 찾아봐도 누락되어 보이는 괄호가 없었다. 결국 GPT한테도 물어봤지만 GPT도 문제를 찾지 못 했던 것이다. 문제는 'DEFAULT'문의 위치였다.
STATUS CHAR(1) DEFAULT 'N' CONSTRAINT MEMBER_CK_STA CHECK(STATUS IN('N','Y')) ,
ENROLL_DATE DATE DEFAULT SYSDATE CONSTRAINT MEMBER_NN_EN NOT NULL
);
코드의 마지막 2줄에 있는 "DEFAULT 'N' " 과 "DEFAULT SYSDATE"를 제약조건명 제시와 제약조건 앞에다 위치시키니 정상적으로 테이블이 생성되었다. GPT한테 물어봐도 답을 모르고 오류코드도 '누락된 우괄호'라고 뜨니까 찾기 정말 힘들었었다..
'SQL' 카테고리의 다른 글
| 기본 키(primary key)와 외래 키(foreign key) (0) | 2025.05.01 |
|---|---|
| SQL 함수 (2) | 2025.01.16 |
| JOIN (0) | 2024.12.18 |
| 함수(FUNCTION) (0) | 2024.12.18 |
| Oracle SQL과 SQL Developer 환경 구축 및 기능 (1) | 2024.12.17 |