package com.oraclejava.es.api.model;

import org.springframework.data.annotation.Transient;
import org.springframework.data.elasticsearch.annotations.Document;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile;

@Document(indexName = "library", type = "_doc", shards = 2)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Movie {
   private String id;
   private String title;
   private int price;
   private String synopsis;

   private byte[] moviePicture;

// @Transient
// private MultipartFile img;
}
package com.oraclejava.es.api.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import com.oraclejava.es.api.model.Movie;
import com.oraclejava.es.api.repository.MovieRepository;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class MovieRestController {

   @Autowired
   private MovieRepository movieRepository;
   
   @PostMapping(value="/saveMovie", produces= MediaType.APPLICATION_JSON_VALUE,
         consumes=MediaType.MULTIPART_FORM_DATA_VALUE)
   public int saveMovie(@RequestPart Movie movie, @RequestPart MultipartFile img) {
      //movies.stream().map(m -> m.setId(UUID.randomUUID()))
      List<Movie> newMovies = new ArrayList<>();
      //for (Movie m : movies) {
      movie.setId((movie.getId() != null)?movie.getId():UUID.randomUUID().toString());
         if (img != null) {
            try {
               movie.setMoviePicture(img.getBytes());
            } catch (IOException e) {
               throw new RuntimeException(e);
            }
         }
         newMovies.add(movie);
      //}
      movieRepository.saveAll(newMovies);
      return newMovies.size();
   }
   
   @DeleteMapping("/deleteMovie/{id}")
   public String deleteMovie(@PathVariable String id) {
      movieRepository.deleteById(id);
      return id;
   }
   
   @GetMapping({"/findAllMovies/{page}", "/findAllMovies"})
   public Iterable<Movie> findAllMovies(@PathVariable(required = false) Integer page) {
      page = (page == null) ? 1 : page;
      return movieRepository.findAll(PageRequest.of(page-1, 10, Sort.by("title")));
   }
   
   @GetMapping({"/findByTitle/{title}","/findByTitle/{title}/{page}"})
   public Iterable<Movie> findByTitle(@PathVariable String title, @PathVariable(required = false) Integer page) {
      page = (page == null) ? 1 : page;
      return movieRepository.findByTitle(title,PageRequest.of(page-1, 10, Sort.by("title")));
   }
   
   @GetMapping("/detailMovie/{id}")
   public Movie detail(@PathVariable String id) {
      System.out.println(id);
      return movieRepository.findById(id).get();
   }
}









import React, { useRef } from 'react';
import { useNavigate } from 'react-router';
import './main.css';
function AddMovie() {
    const navigate = useNavigate();
    //const id = useRef();
    const title = useRef();
    const price = useRef();
    const synopsis = useRef();
    const img = useRef();
    return (
        <>
            <h2>영화 추가</h2>
            <table>
                <tbody>
                    {/* <tr>
                        <td>영화ID</td>
                        <td><input ref={id} /></td>
                    </tr> */}
                    <tr>
                        <td>영화제목</td>
                        <td><input ref={title} /></td>
                    </tr>
                    <tr>
                        <td>가격</td>
                        <td><input type="number" ref={price} /></td>
                    </tr>
                    <tr>
                        <td>줄거리</td>
                        <td><textarea rows="5"
                                cols="60"
                                ref={synopsis} /></td>
                    </tr>
                    <tr>
                        <td>영화이미지</td>
                        <td>
                            <input type='file' ref={img} />
                        </td>
                    </tr>
                    <tr>
                        <td colSpan='2' align='center'>
                            <button type='button' onClick={() => {
                                const form = new FormData();
                                let jsonBodyData = {
                                    'title': title.current.value,
                                    'price': price.current.value,
                                    'synopsis': synopsis.current.value
                                }
                                form.append('movie',  new Blob([JSON.stringify(jsonBodyData)], {
                                    type: 'application/json'
                                  }));

                                form.append('img', img.current.files[0]);
                                fetch('/saveMovie', {
                                    method: 'POST',
                                    // headers: {
                                    //     'Accept': 'application/json',
                                    //     // 'Content-Type': 'multipart/form-data'
                                    // },
                                    // encType: 'multipart/form-data',
                                    body:form
                                }).then(() => {
                                    navigate('/');
                                })
                            }}>
                                추가
                            </button>
                            <button onClick={() => navigate('/')}>영화목록</button>
                        </td>
                    </tr>
                </tbody>
            </table>
        </>
    )

}
export default AddMovie;

slice방식이 아닌 엘라스틱서치 연동방식으로 구현해 보았다..

import React, { useRef, useEffect, useState } from 'react';
import { useNavigate } from 'react-router';
import './main.css';
import MovieItem from './MovieItem';
import Pagination from './Pagination';

function ListMovie() {
    const [movies, setMovieList] = useState([]);
    const [movieLength, setMovieLength] = useState(0);
    //const [currentPage, setCurrentPage] = useState(1);
    const [postsPerPage, setPostsPerPage] = useState(10);
    const title = useRef();
    const navigate = useNavigate();

    function getList(url) {
        fetch(url)
            .then(response => { return response.json(); })
            .then(data => {
                setMovieList(data.content);
                setMovieLength(data.totalElements);
            });
    }

    function searchTitle(url) {
        fetch(url)
            .then(response => { return response.json(); })
            .then(data => {
               
                setMovieList(data);
               
            });
    }

    useEffect(() => { getList('/findAllMovies'); }, []);

    //const indexOfLast = currentPage * postsPerPage;  // 10
    //const indexOfFirst = indexOfLast - postsPerPage; // 0
    const currentMovies = (currentPage) => {
        getList(`/findAllMovies/${currentPage}`);
    };

    return (
        <>
            <h2>영화목록</h2>
            타이틀: <input name="title" ref={title} />
            <button type='button' onClick={() => {
                //const title = title.current.value;
                if (title.current.value == '') {
                    alert('제목을 입력하세요');
                    return false;
                }
                searchTitle(`/findByTitle/${title.current.value}`)

            }}>
                조회
            </button><br/><br/>
            <button onClick={() => navigate('/addMovie')}>영화 추가</button>
            등록된 영화수: {movieLength}
            <br/><br/>
            <div style={{
                display: 'grid',
                gridTemplateRows: '1fr',
                gridTemplateColumns: '1fr 1fr 1fr 1fr'
            }}>
                {movies.map(
                    ({ id , title, price, synopsis }) => (
                        <MovieItem
                            id={id}
                            title={title}
                            price={price}
                           
                        />
                    )
                )}
            </div>
            <Pagination
                postsPerPage={postsPerPage}
                totalPosts={movieLength}
                paginate={currentMovies}></Pagination>
        </>
    )
}

export default ListMovie;

차이점은 currentPage대신에 Spring Boot에서 페이징(엘라스틱 서치 연동)하는 방식이다.

데이터가 많을 경우 이방식으로 하자.

 

Spring 소스

MovieRepository.java

package com.oraclejava.es.api.repository;

 

import java.util.List;

 

import org.springframework.data.domain.Page;

import org.springframework.data.domain.Pageable;

import org.springframework.data.domain.Sort;

import org.springframework.data.elasticsearch.annotations.Query;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

 

import com.oraclejava.es.api.model.Movie;

 

public interface MovieRepository extends ElasticsearchRepository<Movie, String>{

 

//List<Movie> findAll(Sort sort);

Page<Movie> findAll(Pageable pageable);

 

@Query("{\"bool\": {\r\n"

+ " \"should\": [\r\n"

+ " {\r\n"

+ " \"match\": {\r\n"

+ " \"title.nori\": \"?0\"\r\n"

+ " }\r\n"

+ " },\r\n"

+ " {\r\n"

+ " \"match\": {\r\n"

+ " \"synopsis.nori\": \"?0\"\r\n"

+ " }\r\n"

+ " }\r\n"

+ " ]\r\n"

+ " }}")

List<Movie> findByTitle(String title);

}

 

 

MovieRestController.java

package com.oraclejava.es.api.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.oraclejava.es.api.model.Movie;
import com.oraclejava.es.api.repository.MovieRepository;

@RestController
public class MovieRestController {

@Autowired
private MovieRepository movieRepository;

@PostMapping("/saveMovie")
public int saveMovie(@RequestBody List<Movie> movies) {
movieRepository.saveAll(movies);
return movies.size();
}

@DeleteMapping("/deleteMovie/{id}")
public String deleteMovie(@PathVariable String id) {
movieRepository.deleteById(id);
return id;
}

@GetMapping({"/findAllMovies/{page}", "/findAllMovies"})
public Iterable<Movie> findAllMovies(@PathVariable(required = false) Integer page) {
page = (page == null) ? 1 : page;
return movieRepository.findAll(PageRequest.of(page-1, 10, Sort.by("title")));
}

@GetMapping("/findByTitle/{title}")
public List<Movie> findByTitle(@PathVariable String title) {
return movieRepository.findByTitle(title);
}

@GetMapping("/detailMovie/{id}")
public Movie detail(@PathVariable String id) {
System.out.println(id);
return movieRepository.findById(id).get();
}
}









[React] 리액트 페이지네이션(pagination) 구현하기 (2) | ChanBLOG (chanhuiseok.github.io)

 

[React] 리액트 페이지네이션(pagination) 구현하기 (2)

컴퓨터/IT/알고리즘 정리 블로그

chanhuiseok.github.io

를 보고 엘라스틱서치로 데이터를 가져온 것을 페이징(slice로 구현) 처리입니다.

엘라스틱서치는 기본적으로 일정사이즈(기본 10개)로 데이터를 가져옴으로 이부분은 추후에 처리할 예정입니다.

 

ListMovie.js

 

import React, { useRef, useEffect, useState } from 'react';
import { useNavigate } from 'react-router';
import './main.css';
import MovieItem from './MovieItem';
import Pagination from './Pagination';

function ListMovie() {
    const [movies, setMovieList] = useState([]);
    const [currentPage, setCurrentPage] = useState(1);
    const [postsPerPage, setPostsPerPage] = useState(4);
    const navigate = useNavigate();

    function getList(url) {
        fetch(url)
            .then(response => { return response.json(); })
            .then(data => {
                // console.log(data);
                // console.log(data.content);
                setMovieList(data[0].content);
            });
    }

    useEffect(() => { getList('/findAllMovies'); }, []);

    /* 새로 추가한 부분 */
    const indexOfLast = currentPage * postsPerPage;  // 4
    const indexOfFirst = indexOfLast - postsPerPage;  // 0
    const currentMovies = (movies) => {
        let currentPosts = 0;
        currentPosts = movies.slice(indexOfFirst, indexOfLast);
        return currentPosts;
    };

    return (
        <>
            <h2>영화목록</h2>
            <button onClick={() => navigate('/addMovie')}>영화 추가</button>
            등록된 영화수: {movies.length}
            <br/><br/>
            <div style={{
                display: 'grid',
                gridTemplateRows: '1fr',
                gridTemplateColumns: '1fr 1fr 1fr 1fr'
            }}>
                {currentMovies(movies).map(
                    ({ id , title, price, synopsis }) => (
                        <MovieItem
                            id={id}
                            title={title}
                            price={price}
                            synopsis={synopsis}
                        />
                    )
                )}
            </div>
            <Pagination
                postsPerPage={postsPerPage}
                totalPosts={movies.length}
                paginate={setCurrentPage}
            ></Pagination>
        </>
    )
}

export default ListMovie;

 

참고: 스프링부트 리포지토리, 컨트롤러

MovieRepository.java

package com.oraclejava.es.api.repository;

import java.util.List;

import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import com.oraclejava.es.api.model.Movie;

public interface MovieRepository extends ElasticsearchRepository<Movie, String>{

   List<Movie> findAll(Sort sort);

   @Query("{\"match\": {\"title.nori\": \"?0\"}}")
   List<Movie> findByTitle(String title);
}

MovieRestController.java

package com.oraclejava.es.api.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.oraclejava.es.api.model.Movie;
import com.oraclejava.es.api.repository.MovieRepository;

@RestController
public class MovieRestController {

   @Autowired
   private MovieRepository movieRepository;
   
   @PostMapping("/saveMovie")
   public int saveMovie(@RequestBody List<Movie> movies) {
      movieRepository.saveAll(movies);
      return movies.size();
   }
   
   @DeleteMapping("/deleteMovie/{id}")
   public String deleteMovie(@PathVariable String id) {
      movieRepository.deleteById(id);
      return id;
   }
   
   @GetMapping("/findAllMovies")
   public Iterable<Movie> findAllMovies() {
      return movieRepository.findAll(Sort.by("title"));
   }

   @GetMapping("/findByTitle/{title}")
   public List<Movie> findByTitle(@PathVariable String title) {
      return movieRepository.findByTitle(title);
   }
}









'자바 스크립트' 카테고리의 다른 글

html5 Geolocation  (0) 2013.02.11
html5 구글맵  (0) 2013.02.11
html5 transition, transform  (0) 2013.02.11
html5 비디오  (0) 2013.02.11
html5 사이트구축 -webkit-box  (0) 2013.02.11

using System;
using System.Security.Cryptography;

namespace FirstCS
{
    class SimpleClass
    {
        static void Main(string[] args)
        {
            Console.WriteLine("돈 투입!");
            int money = int.Parse(Console.ReadLine());
            (int, int) result = getCoffee(money);
            Console.WriteLine($"{result.Item1}잔, 거스름돈: {result.Item2}");
        }

        static (int, int) getCoffee(int money)
        {
            int price = 300;
            int cup = money / price;
            int change = money % price;
            return (cup, change);
        }
    }
}

안녕하세요 엘라스틱 서치 데이터분석입니다.

줄여서 엘라분야에서 전문가가 많이 필요한 실정인데요...

오라클자바에서는 엘라스틱 서치 데이터분석을 포함한 빅데이터분야의 전분야를 강의중입니다.

자세한 문의는

국기과정

오라클자바교육학원 (oraclejava.co.kr) 

 

오라클자바교육학원

교육목표 - 업무 요구사항을 달성하기 위하여 전사 데이터 아키텍처 정책과 원칙을 기반으로 데이터베이스를 설계, 구축하고 성능을 관리할 수 있다. - 다양한 형태의 대용량 데이터 집합으로부

www.oraclejava.co.kr

단기과정

오라클자바교육학원 (oraclejava.co.kr)

 

오라클자바교육학원

BIG DATA BIGDATA 인프라 개발에 필요한 하둡과 스파크 기술 및 R과 파이썬을 활용한 빅데이터 분석 및 시각화, 인공지능(AI) 개발에 필요한 머신러닝, 딥러닝 기술 훈련을 제공합니다.

www.oraclejava.co.kr

에서 확인 가능합니다.

Shift + Alt + L --> vs code

Ctrl + Shift + D --> sublime text

안녕하세요 구로 빅데이터학원입니다.

이제 2022년도 4개여월밖에 남지 않았네요.

올한해 마무리 잘하시고요

오늘 살펴볼 학원은 오라클자바 교육센터란 곳인데요

구로구 소재 빅데이터 학원중 자바/오라클 전문교육기관으로서

자바/오라클의 풍부한 교육 지도 경험으로 이제 빅데이터 전문 교육기관으로

거듭나고 있습니다.

 

주소는 http://www.oraclejava.co.kr 입니다.

 

특히 단기 과정 및 장기 과정 모두 자주 개강되는 곳이기 때문에

1~2개월 내에 교육받기를 원하는 시간에 교육 수강 가능합니다.

 

빅데이터 과목은 파이썬, 머신러닝 까지 광범위한 분야를 다루고 있습니다.

 

빅데이터의 start point가 필요하신 분은 언제든지 문의 바랍니다.

'기타' 카테고리의 다른 글

자바 스프링 학원  (0) 2022.08.25
국비지원 해택 가능한 프로젝트 교육  (0) 2022.08.24
빅데이터엔지니어양성과정  (0) 2022.08.16
자바 직장인 학원  (0) 2022.07.20
빅데이터 분석학원  (0) 2022.07.14

안녕하세요 자바 스프링 학원입니다.

자바 스프링 학원의 대명사 바로 오라클자바 교육 학원입니다.

오랫동안 쌓인 강의 제공 경험을 바탕으로  자바/스프링 기반의

기초를 다질 수 있는 자바 스프링 학원을 찾으신다면

오라클자바 교육센터(학원)을 검색해 보시기 바랍니다.

 

주소는 www.oraclejava.co.kr  입니다.

 

그럼 오늘 하루도 좋은 하루 되세요!

 

 

참, 다양한 국비 지원 제도가 있어요!!

 

'기타' 카테고리의 다른 글

구로 빅데이터학원  (0) 2022.08.26
국비지원 해택 가능한 프로젝트 교육  (0) 2022.08.24
빅데이터엔지니어양성과정  (0) 2022.08.16
자바 직장인 학원  (0) 2022.07.20
빅데이터 분석학원  (0) 2022.07.14

'기타' 카테고리의 다른 글

구로 빅데이터학원  (0) 2022.08.26
자바 스프링 학원  (0) 2022.08.25
빅데이터엔지니어양성과정  (0) 2022.08.16
자바 직장인 학원  (0) 2022.07.20
빅데이터 분석학원  (0) 2022.07.14
-- creates some test-tables and data
-- DROP TABLE EMPLOYEE;
-- DROP TABLE DEPARTMENT;
-- DROP TABLE SALARYGRADE;
-- DROP TABLE BONUS;
-- DROP TABLE PROJECT;
-- DROP TABLE PROJECT_PARTICIPATION;
-- DROP TABLE ROLE;

CREATE TABLE EMPLOYEE(
   empno      INTEGER NOT NULL,
   name       VARCHAR(10),
   job        VARCHAR(9),
   boss       INTEGER,
   hiredate   VARCHAR(12),
   salary     DECIMAL(7, 2),
   comm       DECIMAL(7, 2),
   deptno     INTEGER
);
 
CREATE TABLE DEPARTMENT(
   deptno     INTEGER NOT NULL,
   name       VARCHAR(14),
   location   VARCHAR(13)
);

CREATE TABLE SALARYGRADE(
   grade      INTEGER NOT NULL,
   losal      INTEGER NOT NULL,
   hisal      INTEGER NOT NULL
);

CREATE TABLE BONUS (
   ename      VARCHAR(10) NOT NULL,
   job        VARCHAR(9) NOT NULL,
   sal        DECIMAL(7, 2),
   comm       DECIMAL(7, 2)
);

CREATE TABLE PROJECT(
   projectno    INTEGER NOT NULL,
   description  VARCHAR(100),
   start_date   VARCHAR(12),
   end_date     VARCHAR(12)
);

CREATE TABLE PROJECT_PARTICIPATION(
   projectno    INTEGER NOT NULL,
   empno        INTEGER NOT NULL,
   start_date   VARCHAR(12) NOT NULL,
   end_date     VARCHAR(12),
   role_id      INTEGER
);

CREATE TABLE ROLE(
   role_id      INTEGER NOT NULL,
   description  VARCHAR(100)
);

-- Primary Keys
ALTER TABLE EMPLOYEE
   ADD CONSTRAINT emp_pk
   PRIMARY KEY (empno);

ALTER TABLE DEPARTMENT
   ADD CONSTRAINT dept_pk
   PRIMARY KEY (deptno);

ALTER TABLE SALARYGRADE
   ADD CONSTRAINT salgrade_pk
   PRIMARY KEY (grade);

ALTER TABLE BONUS
   ADD CONSTRAINT bonus_pk
   PRIMARY KEY (ename, job);

ALTER TABLE PROJECT
   ADD CONSTRAINT project_pk
   PRIMARY KEY (projectno);
 
ALTER TABLE PROJECT_PARTICIPATION
   ADD CONSTRAINT participation_pk
   PRIMARY KEY (projectno, empno, start_date);

ALTER TABLE ROLE
   ADD CONSTRAINT role_pk
   PRIMARY KEY (role_id);

-- EMPLOYEE to DEPARTMENT
ALTER TABLE EMPLOYEE
   ADD CONSTRAINT department
   FOREIGN KEY (deptno)
   REFERENCES DEPARTMENT (deptno);

-- EMPLOYEE to EMPLOYEE
ALTER TABLE EMPLOYEE
   ADD CONSTRAINT boss
   FOREIGN KEY (boss)
   REFERENCES EMPLOYEE (empno);
 
-- EMPLOYEE to PROJECT_PARTICIPATION
ALTER TABLE PROJECT_PARTICIPATION
   ADD CONSTRAINT employee
   FOREIGN KEY (empno)
   REFERENCES EMPLOYEE (empno);

-- PROJECT to PROJECT_PARTICIPATION
ALTER TABLE PROJECT_PARTICIPATION
   ADD CONSTRAINT project
   FOREIGN KEY (projectno)
   REFERENCES PROJECT (projectno);

-- ROLE to PROJECT_PARTICIPATION
ALTER TABLE PROJECT_PARTICIPATION
   ADD CONSTRAINT role
   FOREIGN KEY (role_id)
   REFERENCES ROLE (role_id);

-- data
INSERT INTO DEPARTMENT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPARTMENT VALUES (20, 'RESEARCH',   'DALLAS');
INSERT INTO DEPARTMENT VALUES (30, 'SALES',      'CHICAGO');
INSERT INTO DEPARTMENT VALUES (40, 'OPERATIONS', 'BOSTON');
 
INSERT INTO EMPLOYEE VALUES (7839, 'KING',   'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
    INSERT INTO EMPLOYEE VALUES (7566, 'JONES',  'MANAGER',   7839, '1981-04-02',  2975, NULL, 20);
       INSERT INTO EMPLOYEE VALUES(7788, 'SCOTT',  'ANALYST',   7566, '1982-12-09', 3000, NULL, 20);
          INSERT INTO EMPLOYEE VALUES(7876, 'ADAMS',  'CLERK',     7788, '1983-01-12', 1100, NULL, 20);
       INSERT INTO EMPLOYEE VALUES(7902, 'FORD',   'ANALYST',   7566, '1981-12-03',  3000, NULL, 20);
          INSERT INTO EMPLOYEE VALUES(7369, 'SMITH',  'CLERK',     7902, '1980-12-17',  800, NULL, 20);
    INSERT INTO EMPLOYEE VALUES (7698, 'BLAKE',  'MANAGER',   7839, '1981-05-01',  2850, NULL, 30);
       INSERT INTO EMPLOYEE VALUES(7499, 'ALLEN',  'SALESMAN',  7698, '1981-02-20', 1600,  300, 30);
       INSERT INTO EMPLOYEE VALUES(7521, 'WARD',   'SALESMAN',  7698, '1981-02-22', 1250,  500, 30);
       INSERT INTO EMPLOYEE VALUES(7654, 'MARTIN', 'SALESMAN',  7698, '1981-09-28', 1250, 1400, 30);
       INSERT INTO EMPLOYEE VALUES(7844, 'TURNER', 'SALESMAN',  7698, '1981-09-08',  1500,    0, 30);
       INSERT INTO EMPLOYEE VALUES(7900, 'JAMES',  'CLERK',     7698, '1981-12-03',   950, NULL, 30);
    INSERT INTO EMPLOYEE VALUES(7782, 'CLARK',  'MANAGER',   7839, '1981-06-09',  2450, NULL, 10);
       INSERT INTO EMPLOYEE VALUES(7934, 'MILLER', 'CLERK',     7782, '1982-01-23', 1300, NULL, 10);
 
INSERT INTO SALARYGRADE VALUES (1,  700, 1200);
INSERT INTO SALARYGRADE VALUES (2, 1201, 1400);
INSERT INTO SALARYGRADE VALUES (3, 1401, 2000);
INSERT INTO SALARYGRADE VALUES (4, 2001, 3000);
INSERT INTO SALARYGRADE VALUES (5, 3001, 9999);
 
INSERT INTO ROLE VALUES (100, 'Developer');
INSERT INTO ROLE VALUES (101, 'Researcher');
INSERT INTO ROLE VALUES (102, 'Project manager');

INSERT INTO PROJECT VALUES (1001, 'Development of Novel Magnetic Suspension System', '2006-01-01', '2007-08-13');
INSERT INTO PROJECT VALUES (1002, 'Research on thermofluid dynamics in Microdroplets', '2006-08-22', '2007-03-20');
INSERT INTO PROJECT VALUES (1003, 'Foundation of Quantum Technology', '2007-02-24', '2008-07-31');
INSERT INTO PROJECT VALUES (1004, 'High capacity optical network', '2008-01-01', null);
 
INSERT INTO PROJECT_PARTICIPATION VALUES (1001, 7902, '2006-01-01', '2006-12-30', 102);
INSERT INTO PROJECT_PARTICIPATION VALUES (1001, 7369, '2006-01-01', '2007-08-13', 100);
INSERT INTO PROJECT_PARTICIPATION VALUES (1001, 7788, '2006-05-15', '2006-11-01', 100);

INSERT INTO PROJECT_PARTICIPATION VALUES (1002, 7876, '2006-08-22', '2007-03-20', 102);
INSERT INTO PROJECT_PARTICIPATION VALUES (1002, 7782, '2006-08-22', '2007-03-20', 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1002, 7934, '2007-01-01', '2007-03-20', 101);

INSERT INTO PROJECT_PARTICIPATION VALUES (1003, 7566, '2007-02-24', '2008-07-31', 102);
INSERT INTO PROJECT_PARTICIPATION VALUES (1003, 7900, '2007-02-24', '2007-01-31', 101);

INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7499, '2008-01-01', null, 102);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7521, '2008-05-01', null, 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7654, '2008-04-15', null, 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7844, '2008-02-01', null, 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7900, '2008-03-01', '2008-04-01', 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7900, '2008-05-20', null, 101);

'오라클' 카테고리의 다른 글

oracle offset fetch  (0) 2022.08.19
페이징 코드(간단)  (0) 2015.01.16
Movie Database  (0) 2014.06.20
오라클 정리-유저 롤/권한설정  (0) 2012.12.14
oracle 정리-테이블스페이스  (0) 2012.12.14

+ Recent posts