지난시간에 우리는 날씨별 옷추천이라는 기능을 구현하기 위해서 여러 의류쇼핑몰의 데이터베이스를 가져오는 단계에서 합법적인 웹 크롤링을 이용하려 했다. 그러나 방법을 배우지 않아 어려움이 많다는 한계가 생겼다.
그래서 추천코디를 미리 recommend 테이블에 넣어두고, 그날 날씨와 기온으로 코디를 불러와 보여주는 것으로 변경했다.
weather 테이블에 정해진 10가지 값과 TEMPERATURE의 기온을 일정하게 나눠 경우의 수에 따라 다른 코디를 추천하기로 했다.
- 컬럼변경 TEMPHIGH, TEMPROW -> temperature
- 제약조건 TEMPHIGH_HOTTER_THEN_TEMPROW X
- temperature NUMBER -> FLOAT
- 오타 고침 : func_SEQ_WEATHER1_CODE_nextval (naxt->next)
WEATHER1에서 TEMPERATURE의 기온은 현재기온으로 설정했다.
이때 '현재'란 로그인시점, 접속시점을 기준으로 한다.
접속 혹은 로그인 이벤트가 발생하면 시간을 가져온다.
-- WEATHER1 테이블 다시 만듦
SELECT * FROM WEATHER1 ;
DROP SEQUENCE SEQ_WEATHER1_CODE;
DROP TABLE WEATHER1 CASCADE CONSTRAINTS;
DROP FUNCTION FUNC_SEQ_WEATHER1_CODE_NAXTVAL;
CREATE TABLE weather1
(
code number(10) NOT NULL,
regdate TIMESTAMP NOT NULL,
weather VARCHAR2(50),
temperature NUMBER(10) ,
no NUMBER(5) NOT NULL,
CONSTRAINT PK_weather1 PRIMARY KEY (code)
);
--- 제약조건
-- location1-weather1 외래키 (1대n)
ALTER TABLE weather1
ADD CONSTRAINT FK_location1_TO_weather1
FOREIGN KEY (no)
REFERENCES location1 (no);
-- 외래키 삭제하기
-- recommend1-weather1 외래키 (1대n)
ALTER TABLE weather1 DROP CONSTRAINT FK_location1_TO_weather1;
ALTER TABLE recommend1
ADD CONSTRAINT FK_weather1_TO_recommend1
FOREIGN KEY (code)
REFERENCES weather1 (code);
오타 많이 잡았고
TEMPERATURE의 데이터 유형에 처음에 number를 사용했는데
무슨 연유에선지 소숫점 값이 안들어가서 float으로 바꿨다.
--- WEATHER1 데이터 입력
-- 시퀀스
CREATE SEQUENCE SEQ_WEATHER1_CODE INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCACHE;
-- 삭제
DROP SEQUENCE SEQ_WEATHER1_CODE;
-- 함수
CREATE OR REPLACE FUNCTION func_SEQ_WEATHER1_CODE_nextval RETURN NUMBER
IS
BEGIN
RETURN SEQ_WEATHER1_CODE.NEXTVAL;
EXCEPTION WHEN OTHERS THEN
RETURN null;
END;
/
-- 삭제
DROP FUNCTION func_SEQ_WEATHER1_CODE_nextval;
-- 일괄입력
INSERT ALL
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '맑음', 9.8, 30)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '구름조금', 14.0, 31)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '구름많음', 14.1, 32)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '흐림', 7.1, 33)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '비', 13.1, 34)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '눈', 12.0, 35)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '비 또는 눈', 13.6, 36)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '천둥번개', 9.8, 37)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '안개', 9.2, 38)
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE+1 , '황사', 11.2, 39)
SELECT * FROM DUAL;
-- 소숫점 기온이 안들어가서
-- WEATHER1 편집에서 TEMPERATURE의 데이터 유형을 NUMBER -> FLOAT으로 바꿈
-- 소숫점 들어가는지 보려고 한개 넣기 시도
INSERT
INTO WEATHER1 (code, regdate, weather, TEMPERATURE, NO)
VALUES(func_SEQ_WEATHER1_CODE_nExtval, CURRENT_DATE+1 , '구름많음', 10.4, 32);
-- 잘 들어감
SELECT * FROM WEATHER1;
ROLLBACK;
COMMIT;
(과연최종일까)
이제
옷 코디 추가하고
Jframe에 화면 구상하고
만들면
되겠다
(과연그럴까)