Oracle 10g 부터는 데이터의 백업과 복원을 위해서 기존에 사용되는 exp/imp툴을 대신할 Oracle Data Pump(expdp/impdp) 유틸리티가 제공되어 집니다. exp/imp 툴이 없어진것은 아닙니다. Oracle 11g 부터는 기존의 Original  exp/imp툴에 대한  일반적인 사용지원이 되지 않는다고 합니다.

 

Oracle Data Pump 유틸리티는 더욱 유연하고, 빠른 속도의 기존의 exp/imp를 대체할 유틸리티 라고 합니다. 기존의 exp/imp와의 차이점을 간단히 알아보겠습니다.

 

1. exp/imp는 덤프 파일을 유틸리티를 실행하는 컴퓨터에 생성합니다. expdp/impdp 는 덤프 파일이 데이터베이스 서버의 지정된 폴더에 생성됩니다. 즉, 덤프 파일을 받고 올리기 위해서 서버에 로그인해야만 합니다.

 

2. exp/imp는 덤프파일이 생성된 서버의 버전이 다를 경우 호환이 되지 않습니다. 메이저 버전 뿐만 아니라, 마이너 버전 사이에도 호환이 거의 안되는것 같습니다. expdp/impdp 는 실행시 버전을 지정하여 그에 맞는 덤프 파일을 생성할 수 있습니다.


요약

1. expdp, impdp 사용한다.

2. 출발지 DB에서 DATA_PUMP_DIR 경로를 확인한다.

SELECT * FROM ALL_DIRECTORIES;

3. expdp full 방식으로 export 한다. (cmd 창에서)

expdp [db계정]/[db계정PW] full=Y directory=DATA_PUMP_DIR dumpfile=expdp_20211101.dmp logfile=expdp_20211101.log

4. DB dump 파일(.dmp)을 복사하여 목적지 DB가 있는 PC 또는 서버에 복사한다.

5. import하기 전, 출발지 DB에서 tablespace 구성을 확인한다.

 1> 목적지 db에서 sqlplus 또는 toad, orange for oracle에 system 계정으로 접속하여 tablespace 경로를 확인한다.

SELECT SUBSTRB(TABLESPACE_NAME, 1, 10) AS "테이블스페이스"
    ,SUBSTRB(FILE_NAME, 1, 50) AS "파일명"
    ,TO_CHAR(BLOCKS, '999,999,990') AS "블럭수"
    ,TO_CHAR(BYTES, '99,999,999') AS "크기"
FROM DBA_DATA_FILES
ORDER BY TABLESPACE_NAME, FILE_NAME;

 2> tablespace 편집을 누르면 옵션을 확인할 수 있다.  

              

6. 목적지 DB의 tablespace와 비교하여 없는 tablespace를 목적지 DB에서 다 생성할 준비를 한다.

  - 목적지에서 DATAFILE의 경로는 자유롭게 확인하여 설정한다. (위에 5-1 쿼리로 확인 가능)

CREATE TABLESPACE TS_TEMP
     DATAFILE 'D:\app\82103\oradata\orcl\TS_TEMP.DEF'
     SIZE 10M
     AUTOEXTEND ON NEXT 1M
     MAXSIZE UNLIMITED
     LOGGING
     ONLINE 
     EXTENT MANAGEMENT LOCAL AUTOALLOCATE
     BLOCKSIZE 8K
     SEGMENT SPACE MANAGEMENT MANUAL
     FLASHBACK OFF;

7. 출발지 DB에서 사용했던 DB계정과 동일하게 목적지 DB에서 생성하고, 권한을 부여한다. (PW는 달라도 됨)

8. 목적지 DB에서 impdp 실행한다. (cmd 창에서)

impdp [db계정]/[db계정 PW] full=Y directory=DATA_PUMP_DIR dumpfile=EXPDP_20211101.dmp logfile=expdp_20211101.log

결론

윈도우 서버에 있는 DB data를 노트북 로컬 DB로 옮기는 작업을 해봤다.

export까지는 문제없었으나, import 시 tablespace를 미리 생성안하면 오류가 나고 진행이 안되서 많이 당황했었다.

위에 요약에서 5, 6번 과정이 핵심인 것 같다.

 

아래는 방식별 상세 내용이다.

요약을 중심으로 확인하면 될 것 같다.

 


exp, imp 방식

자신이 사용중인 오라클DB의 데이터를 다른곳 (다른PC)로 옮기고 싶을때 데이터베이스를 덤프/임포트 하는 방법

가장먼저 DB덤프에서 임포트하는 단위는 3가지가 있습니다.

첫째 전체단위, 둘째 사용자 단위, 세번째 테이블 단위입니다.

 

1. 전체다위

덤프(익스포트) |

C:\) exp userid=system/비밀번호 file='C:\파일명.dmp' full=y

임포트

C:\) imp userid=system/비밀번호 file='C:\파일명.dmp' full=y

인데 간혹 버퍼 사이즈가 맞지 않아 에러가 뜨는경우가 있다.

해결방법 : 제가 한 방법으로는 계정을 삭제하고 다시 만들어 

C:\) exp userid=system/비밀번호 file='C:\파일명.dmp' full=y buffer = 100000000

이런식으로 하여 에러를 수정하였습니다.

 

2. 사용자 단위(특정 계정/사용자의 DB )

덤프(익스포트) |

C:\) exp userid=계정명/비밀번호 file='C:\파일명.dmp' 

임포트 |

C:\) imp userid=계정명/비밀번호 file='C:\파일명.dmp' 

인데 간혹 버퍼 사이즈가 맞지 않아 에러가 뜨는경우가 있다.

해결방법 : 제가 한 방법으로는 계정을 삭제하고 다시 만들어 

C:\) exp userid=system/비밀번호 file='C:\파일명.dmp' full=y buffer = 100000000

이런식으로 하여 에러를 수정하였습니다.

 

3. 테이블 단위(특정 계정의 특정 테이블만을 추출)

덤프(익스포트) |

C:\) exp userid=계정명/비밀번호 file='C:\파일명.dmp' tables=테이블명

임포트 |

C:\) imp userid=계정명/비밀번호 file='C:\파일명.dmp' 

인데 간혹 버퍼 사이즈가 맞지 않아 에러가 뜨는경우가 있다.

해결방법 : 제가 한 방법으로는 계정을 삭제하고 다시 만들어 

C:\) exp userid=system/비밀번호 file='C:\파일명.dmp' full=y buffer = 100000000

이런식으로 하여 에러를 수정하였습니다.


Oracle Data Pump(expdp/impdp) 방식

디렉토리 생성 및 권한 부여

1. 덤프 파일 생성 디렉토리 생성 (/data/dump 사용)

2. 1에서 생성한 디렉토리 oracle에 등록

 

CREATE OR REPLACE DIRECTORY TEST_DUMP AS '/data/dump';

 

3. 일반유저에게 디렉토리 읽기, 쓰기 권한 부여

GRANT READ, WRITE ON DIRECTORY TEST_DUMP TO [아이디];

  • create session
  • create table
  • create directory
  • read, write on directory

4. 권한 확인

 - 디렉토리 확인

SELECT * FROM ALL_DIRECTORIES;

 - 권한 확인

SELECT * FROM ALL_TAB_PRIVS WHERE TABLE_NAME IN (

SELECT DIRECTORY_NAME FROM ALL_DIRECTORIES

);

 - Oracle 11g r2 이상시 권한 확인

SELECT * FROM DATAPUMP_DIR_OBJS;

데이터 export / import

테이블 export / import (특정 테이블을 export / import 한다.)

$ expdp xeuser/xeuser@xe tables=EMP,DEPT directory=TEST_DUMP dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log

$ impdp xeuser/xeuser@xe tables=EMP,DEPT directory=TEST_DUMP dumpfile=EMP_DEPT.dmp logfile=impdpEMP_DEPT.log

  • xeuser/xeuser@xe - 아이디/비밀번호$SID
  • tables=EMP,DEPT - 테이블을 콤마(,)로 분리해서 나열
  • directory=TEST_DUMP - 덤프파일이 생성될 디렉토리
  • dumpfile=EMP_DEPT.dmp - 생성될 덤프 파일명
  • logfile=expdpEMP_DEPT.log - 로그 파일명으로 덤프파일과 같은 위치에 만들어짐

스키마 export / import

$ expdp xeuser/xeuser@xe schemas=XEUSER directory=TEST_DUMP dumpfile=XEUSER.dmp logfile=expdpXEUSER.log

$ impdp xeuser/xeuser@xe schemas=XEUSER directory=TEST_DUMP dumpfile=XEUSER.dmp logfile=impdpXEUSER.log

  • schemas=XEUSER - 주어진 사용자(schema)가 가진 전체 객체를 export / import 함

데이터베이스 전체 export / import

$ expdp system/password@xe full=Y directory=TEST_DUMP dumpfile=XE.dmp logfile=expdpXE.log

$ impdp system/password@xe full=Y directory=TEST_DUMP dumpfile=XE.dmp logfile=impdpXE.log

  • 전체 작업은 권한이 있는 system 계정으로 진행
  • full=Y - 전체 데이터베이스를 대상으로 함

데이터베이스 Link를 통해서 export / import 하기 위해서는 로컬과 리모트 사용자 모두에게 EXP_FULL_DATABASE / IMP_FULL_DATEBASE 룰이 부여되어 있어야 한다.

다음 예는 로컬계정은 xeuser 이고, 리모트 서버가 REMOTE_SCOTT라는 이름으로 링크 되어 있다고 가정한다. 리모트 계정은 scott 이다.

$ expdp xeuser/xeuser@xe tables=SCOTT.EMP network_link=REMOTE_SCOTT directory=TEST_DUMP dumpfile=EMP.dmp logfile=expdpEMP.log

$ impdp xeuser/xeuser@xe tables=SCOTT.EMP network_link=REMOTE_SCOTT directory=TEST_DUMP logfile=impdpSCOTT.log remap_schema=SCOTT:XEUSER

  • remap_schema-SCOTT:XEUSER - SCOTT계정의 객체들을 XEUSER 계정으로 로드

버전을 지정하여 export (버전은 9.2 이상만 지정 가능)

$ expdp xeuser/xeuser@xe schemas=XEUSER version=10.2 directory=TEST_DUMP dumpfile=XEUSER.dmp logfile=expdpXEUSER.log

그외 자세한 옵션에 대해서는 https://oracle-base.com/articles/10g/oracle-data-pump-10g 참고

스프링 프로젝트를 import 하거나 SVN에서 체크아웃 받은 후 환경설정 하다보면 아래와 같은 오류가 나온다.

 

[오류 내용]

maven java ee configuration problem(2 items)

- dynamic web module 3.1 requires java 1.7 or newer

- one or more constraints have not been satisfied



위 에러는 dynamic web module 3.1 로 설정이 되어있지만, Spring의 web.xml에 들어가는 Servlet Version 이 달라서 생기는 오류로 보인다.

 

[dynamic web module 버전 확인]

프로젝트 마우스 오른쪽 클릭 - Build Path - Configure Build Path - ProJect Facets - Dynamic Web Module 버전 확인

 

[Spring web.xml 확인]

dynamic web module 버전마다 Servlet Version이 다르므로 아래 내용 참조하여 수정하면 된다.

dynamic web module 버전이 3.1로 설정되어 있는 경우 

web-app_3_1.xsd" version="3.1" 로 변경한다.

 

Servlet 2.2

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app/>

Servlet 2.3

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app/>

Servlet 2.4 - DTD에서 Schema로 변경됨

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="servlet-2_4" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>

Servlet 2.5

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="servlet-2_5"
	version="2.5">
</web-app>

Servlet 3.0

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
</web-app>

Servlet 3.1

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
</web-app>

Servlet 4.0

<?xml version="1.0" encoding="UTF-8"?>
<web-app
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
	version="4.0">
</web-app>

 

[참고 자료]

http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html

UserVO 생성

public class UserVO {
	private String userId;
	private String userPw;
	private String userName;
	
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserPw() {
		return userPw;
	}
	public void setUserPw(String userPw) {
		this.userPw = userPw;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	@Override
	public String toString() {
		return "UserVO [userId=" + userId + ", userPw=" + userPw + ", userName=" + userName + "]";
	}
}

 

컨트롤러 생성

@RequestMapping("/login")
	public void login(UserVO user){
    }

post방식으로 /login 요청이 들어올때

파라미터 이름이 만약 UserVO 객체의 필드명 각각의 set메서드의 필드명과 일치하면

알아서 setter가 작동하여 객체에 파라미터값들을 이름이 서로 일치하는 변수로 다 주입 시킵니다.

오라클 공식 홈페이지를 XE 버전만 있고,

SE 버전은 찾기 힘들었습니다.

 

아래 URL 접속하여 database로 검색 후 필요한 부분만 체크하여 다운로드 받으면 됩니다 ^^

 


Oracle 11g SE 다운로드 URL (2020.12.24 기준)

edelivery.oracle.com  

 

프로시저를 실행했을 때 아래와 같이 오류가 나오는 경우가 있다.


오류 보고 -
ORA-01031: insufficient privileges
01031. 00000 -  "insufficient privileges"
*Cause:    An attempt was made to perform a database operation without
           the necessary privileges.
*Action:   Ask your database administrator or designated security
           administrator to grant you the necessary privileges


해결 방법

sysdba로 접속하여 아래와 같이 입력 ( SCOTT = user명 )

 

SQL>GRANT CREATE PROCEDURE TO SCOTT;

오라클 사이트에서 11g XE windows 버전으로 다운로드 후 설치

(설치파일 필요하신 분 댓글로 문의주세요.)


DB 접속 방법

 

1) cmd 실행

2) splplus / as sysdba

 - 관리자로 DB 접속하는 명령어

3) scott 계정 생성 및 권한 부여

CREATE USER scott IDENTIFIED BY tiger ;
ALTER USER scott DEFAULT TABLESPACE USERS ;
ALTER USER scott QUOTA UNLIMITED ON USERS ;
GRANT RESOURCE,CONNECT, DBA, EXP_FULL_DATABASE, IMP_FULL_DATABASE TO scott ;
ALTER USER scott ACCOUNT UNLOCK;

4) 리스너 재시작, SQL서버 재시작

cmd> lsnrctl stop
SQL> shutdown immediate
SQL> startup
cmd> lsnrctl start

 


DROP TABLE emp ;
CREATE TABLE emp
 (empno    NUMBER(4) NOT NULL,
  ename    VARCHAR2(10),
  job      VARCHAR2(9),
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7, 2),
  comm     NUMBER(7, 2),
  deptno   NUMBER(2));
 

INSERT INTO emp VALUES (7369, 'SMITH',  'CLERK',     7902, DATE'1980-12-17',  800, NULL, 20);
INSERT INTO emp VALUES (7499, 'ALLEN',  'SALESMAN',  7698, DATE'1981-02-20', 1600,  300, 30);
INSERT INTO emp VALUES (7521, 'WARD',   'SALESMAN',  7698, DATE'1981-02-22', 1250,  500, 30);
INSERT INTO emp VALUES (7566, 'JONES',  'MANAGER',   7839, DATE'1981-04-02', 2975, NULL, 20);
INSERT INTO emp VALUES (7654, 'MARTIN', 'SALESMAN',  7698, DATE'1981-09-28', 1250, 1400, 30);
INSERT INTO emp VALUES (7698, 'BLAKE',  'MANAGER',   7839, DATE'1981-05-01', 2850, NULL, 30);
INSERT INTO emp VALUES (7782, 'CLARK',  'MANAGER',   7839, DATE'1981-06-09', 2450, NULL, 10);
INSERT INTO emp VALUES (7788, 'SCOTT',  'ANALYST',   7566, DATE'1987-04-19', 3000, NULL, 20);
INSERT INTO emp VALUES (7839, 'KING',   'PRESIDENT', NULL, DATE'1981-11-17', 5000, NULL, 10);
INSERT INTO emp VALUES (7844, 'TURNER', 'SALESMAN',  7698, DATE'1981-09-08', 1500,    0, 30);
INSERT INTO emp VALUES (7876, 'ADAMS',  'CLERK',     7788, DATE'1987-05-23', 1100, NULL, 20);
INSERT INTO emp VALUES (7900, 'JAMES',  'CLERK',     7698, DATE'1981-12-03',  950, NULL, 30);
INSERT INTO emp VALUES (7902, 'FORD',   'ANALYST',   7566, DATE'1981-12-03', 3000, NULL, 20);
INSERT INTO emp VALUES (7934, 'MILLER', 'CLERK',     7782, DATE'1982-01-23', 1300, NULL, 10);

DROP TABLE dept ;
CREATE TABLE dept
 (deptno NUMBER(2),
  dname  VARCHAR2(14),
  loc    VARCHAR2(13) );
 
INSERT INTO dept VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES (20, 'RESEARCH',   'DALLAS');
INSERT INTO dept VALUES (30, 'SALES',      'CHICAGO');
INSERT INTO dept VALUES (40, 'OPERATIONS', 'BOSTON');

DROP TABLE bonus ;
CREATE TABLE bonus
  (ename VARCHAR2(10),
   job   VARCHAR2(9),
   sal   NUMBER,
   comm  NUMBER);

DROP TABLE salgrade ;
CREATE TABLE salgrade 
(
  grade   NUMBER,
  losal   NUMBER,
  hisal   NUMBER
) ;

INSERT INTO salgrade VALUES (1,  700, 1200);
INSERT INTO salgrade VALUES (2, 1201, 1400);
INSERT INTO salgrade VALUES (3, 1401, 2000);
INSERT INTO salgrade VALUES (4, 2001, 3000);
INSERT INTO salgrade VALUES (5, 3001, 9999);
 
COMMIT;

scanf() 함수를 사용하면 C4996 오류가 발생하곤 합니다.


원인

 원래는 문제없이 컴파되는 것이 맞지만, scanf() 등의 함수에서 발생 가능한 잠재적 문제점으로 인해 MSVC에 이 함수들을 사용하지 못하도록 강제하는 설정(SDL, Security Development Lifecycle)이 활성화되어 사용하지 못하는 것입니다.


처리방법

1. 프로젝트 설정 변경

 1) Visual Studio 2019 상단 메뉴의 프로젝트 - 속성(P)을 눌러 속성 창을 엽니다.

 2) 왼쪽의 C/C++ - 일반 메뉴에서 SDL 검사 항목을 아니요(/sdl-)로 바꿔줍니다.

 

 

 2) 전처리 코드 작성

#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS

 둘중 하나만 작성해서 사용하면 됩니다.

'C' 카테고리의 다른 글

VS ERROR C6031 : 반환 값이 무시되었습니다. 'function'.  (0) 2020.12.17

 

#include <stdio.h>
void main(){
	int int_data;
	float float_data;

	scanf("%d", &int_data);
	scanf("%f", &float_data);

	printf("input : %d, %f\n", int_data, float_data);
}

위와 같이 사용할 때 C6031 오류가 납니다.


원인

 함수 scanf의 반환값을 어딘가에 대입하거나 사용하지 않아서 발생하는 경고입니다. 코드상 문제도 없으며, 단순히 버려지는 값이 있음을 알리기 위해 인텔리센스가 안내하는 내용입니다. 만일 원하는 작업대로 정상 동작 한다면 무시하셔도 됩니다.


처리 방법

 

1. 프로젝트 속성 수정

 1) Visual Studio 2019 상단 [프로젝트 - 속성] 을 눌러 속성 창을 엽니다.

 

 2) 왼쪽 탭에서 [ C/C++ - 고급] 메뉴를 엽니다. 이 때, [C/C++]메뉴는 *.c 혹은 *.cpp 파일이 하나 이상 프로젝트에 포함되어있어야합니다.

 

 3)  [특정 경고 사용 안 함] 메뉴에 가리고자 하는 경고 번호를 입력하세요. 여기선 6031을 입력해주시면 됩니다. 

 

2. 반환 값을 변수에 담기

#include <stdio.h>
void main(){
	int int_data;
	float float_data;

	int tmp = scanf("%d", &int_data);
	int tmp1 = scanf("%f", &float_data);

	printf("input : %d, %f\n", int_data, float_data);
}

 

'C' 카테고리의 다른 글

VS ERROR C4996 : This function or variable may be unsafe  (0) 2020.12.17

# 환경

- Spring 4.6.1.RELEASE

- mybatis

- 뷰 페이지 : jsp 

- tomcat v9.0

 

# 구현 방법 정리

1. login.jsp : <form>에서 로그인 ID, PW를 받아서 controller로 넘긴다.  

2. controller : ID, PW 확인하는 로직을 수행 후 리턴값 널 체크, 조건문으로 분기한다.

 - ID, PW가 틀릴 경우 : HttpSession에 원하는 에러메세지를 담아서 로그인 페이지로 리턴한다.

3. login.jsp : ID 또는 PW가 틀렸을 경우 에러메세지를 보여준다.

 

#간략한 중요 코드

1. login.jsp

<script>
function login_submit() {
	var user_id = document.frm.user_id.value.trim().toUpperCase();
	var password = document.frm.password.value.trim();
	var send_frm = document.frm;

	if (user_id == "") {
	alert("아이디를 입력하여 주시기 바랍니다.");
	document.frm.user_id.focus();
	return false;
	}

	if (password == "") {
		alert("비밀번호를 입력하여 주시기 바랍니다.");
		document.frm.password.focus();
	return false;
	}
	send_frm.action = "host_main"
	send_frm.method = "post";
	send_frm.submit();
}
</script>

<body>
<form name="frm">
ID : <input type="text" name="user_id" id="user_id">
PW : <input type="password" name="password" id="password">
<img src="web/images/login_btn.gif" onclick="login_submit()" style="cursor: pointer;">
</form>

<input type="hidden" id="loginCheck" name="loginCheck" value="${check}">

<script>
	$(document).ready(function() {
		var check = $('#loginCheck').val();
		if(check != ""){
			alert(check);
			$('#loginCheck').val() = "";
		}
	});
</script>
</body>

 

2. Controller

@Controller
public class HostController {
	@Autowired
	private HostService service;
    
 	// 관리자 로그인처리
	@RequestMapping("host_main")
	public String goHostMain(UserVO vo, Model model, HttpSession session, HttpServletRequest request) {
    UserVO uvo = service.loginCheck(vo);
		
		if(uvo == null) {
			session.setAttribute("check", "ID를 확인해주세요.");
			return "host/login";
		}
        
        if(vo.getUser_id().equals(uvo.getUser_id())) {
			// id OK
			if(vo.getPassword().equals(uvo.getPassword())) {
				// pw OK
                
            } else {
				// PW NO OK
				session.setAttribute("check", "PW를 확인해주세요.");
				return "host/login";
			}
		} else {
			// ID NOT OK
			session.setAttribute("check", "ID를 확인해주세요.");
			return "host/login";
		}
		return "main/main";
	}

 

MSSQL 사용할 때 아래와 같이 mybatis에서 + 연산자를 사용한다.

 - AND  TEL_NO LIKE '%'+#{tel_no}+'%'

 - AND  TEAM_ID = #{team_detail_id}

 - AND  TEAM_ID LIKE #{team_id}+'%'

 

하지만 postgreSQL에서는 아래와 같이 수정해야 한다.

 - AND  TEL_NO LIKE '%${tel_no}%'

 - AND  TEAM_ID = #{team_detail_id}

 - AND  TEAM_ID LIKE '${team_id}%'

 

postgreSQL은 문자열 간에 + 연산자를 사용하지 않는 것 같다.

문자열 간 합치고 싶을 땐 || 연산자를 사용한다.

 - select 'aa' || 'bb' as sumchar;   -- sumchar='aabb'

'DB > PostgreSQL' 카테고리의 다른 글

date type  (0) 2020.12.01

+ Recent posts