반응형
반응형
반응형

 

ANSI Query(SQL)

  • ANSI(American National Standards Institute, 미국 국립 표준 협회)에서 제시한 SQL에 대한 보편적인 문법

Visual Representation of SQL Joins - CodeProject

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

 


 

오라클 Join 예제.

 

테이블 : T_MEMBER

T_MEMBER 테이블

 

테이블 : T_DEPARTMENT

T_DEPARTMENT 테이블

 


 

Inner Join
-- (교집합) 각 테이블에서 조인 조건에 일치되는 데이터만 가져온다.

(ANSI) SELECT m.*, d.* FROM T_MEMBER m INNER JOIN T_DEPARTMENT d ON m.DEPT_IDX = d.DEPT_IDX;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_DEPARTMENT d WHERE m.DEPT_IDX = d.DEPT_IDX;

Inner Join

 

 

 

Outer Join
-- 조인 조건에 일치하는 데이터 및 일치하지 않은 데이터를 모두 SELECT 한다.
-- 조인 조건에 일치하는 데이터가 없다면 NULL로 가져온다.
-- 주(main) 테이블이 어떤 테이블인지가 중요하다.

 

  • Left Outer Join
(ANSI) SELECT m.*, d.* FROM T_MEMBER m LEFT OUTER JOIN T_DEPARTMENT d ON m.DEPT_IDX = d.DEPT_IDX ORDER BY m.MEM_ID;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_DEPARTMENT d WHERE m.DEPT_IDX = d.DEPT_IDX(+) ORDER BY m.MEM_ID;

Left Outer Join

 

  • Right Outer Join
(ANSI) SELECT m.*, d.* FROM T_MEMBER m RIGHT OUTER JOIN T_DEPARTMENT d ON m.DEPT_IDX = d.DEPT_IDX ORDER BY m.MEM_ID;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_DEPARTMENT d WHERE m.DEPT_IDX(+) = d.DEPT_IDX ORDER BY m.MEM_ID;

Right Outer Join

 

  • Full Outer Join
(ANSI) SELECT m.*, d.* FROM T_MEMBER m FULL OUTER JOIN T_DEPARTMENT d ON m.DEPT_IDX = d.DEPT_IDX ORDER BY m.MEM_ID;
(Oralce) X

Full Outer Join

 

 

Cross Join
-- 두 테이블 조인 시 가능한 모든 경우의 레코드를 SELECT 한다.
-- 경우의 수 : N * M

(ANSI) SELECT m.*, d.* FROM T_MEMBER m CROSS JOIN T_DEPARTMENT d ORDER BY m.MEM_ID, d.DEPT_IDX;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_DEPARTMENT d ORDER BY m.MEM_ID, d.DEPT_IDX;

Cross Join

 

Self Join
-- 테이블이 자기 자신을 마치 다른 테이블처럼 취급하여 조인한다.

(ANSI) SELECT m.*, d.* FROM T_MEMBER m JOIN T_MEMBER d ON m.MEM_ID = d.MEM_ID ORDER BY m.MEM_ID;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_MEMBER d WHERE m.MEM_ID = d.MEM_ID ORDER BY m.MEM_ID;

Self Join

 

 

 

반응형

'Database > Oracle' 카테고리의 다른 글

NLS 파라미터 확인  (0) 2020.11.17
JDBC 오류?? varchar 에 2000byte 이상 insert 하기.  (0) 2011.11.07
캐릭터셋 확인.  (0) 2011.10.20
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
반응형

# 세션 레벨.(현재 세션 정보)
SELECT parameter, value FROM nls_session_parameters;
 - alter session set nls_XXX 로 변경 가능.

# 인스턴스 레벨.
SELECT PARAMETER, value FROM nls_instance_parameters;
 = SELECT name, VALUE FROM V$PARAMETER where name like '%nls%';

# DB 레벨.(설치시 정보 - 변경 불가)
SELECT parameter, value FROM nls_database_parameters;
= SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS;
= SELECT name, value$ FROM sys.props$ where name like '%NLS%';

set pagesize 30set linesize 300

column PARAMETER format a30
column VALUE format a30

column value$ format a30

반응형

'Database > Oracle' 카테고리의 다른 글

오라클 JOIN / ANSI JOIN  (0) 2022.02.03
JDBC 오류?? varchar 에 2000byte 이상 insert 하기.  (0) 2011.11.07
캐릭터셋 확인.  (0) 2011.10.20
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
반응형

pstmt = conn.prepareStatement(" insert into TEST (A, B) values (?, ?) ");
pstmt.setString(1, a);
pstmt.setString(2, b);


환경
 - NLS_LANG : ko_kr.KO16KSC5601

기능.
 - varchar2(4000)에 PreparedStatement로 setString() 함수를 이용하여 insert

문제점.
 - java.sql.SQLException: 데이터 크기가 해당 유형의 최대 크기보다 큽니다: 2001
 - 확인 결과 UTF8로 2000이 넘어가면 위와 같은 Exception이 발생.
 - 환경 설정이 KSC5601 등으로 설정 되어 있어도 UTF-8 로 변환하여 체크하기 때문에 문제 발생.

해결 방법 1.
 - UTF8 bytes길이가 2000이 넘어갈때 setString() 대신 setCharacterStream()을 사용해야 하는데
    컬럼이 1개 일때만 해당 컬럼을 맨 뒤로 빼서 사용하는게 안전.
    여러개의 setCharacterStream()을 사용하면 순서가 뒤바뀔수 있음.
 - pstmt.setCharacterStream(2, new StringReader(b), b.length());

해결 방법 2.
 - Statement를 사용
    Statement를 사용할때는 '만 ''로 escape.
 - pstmt = conn.prepareStatement(" insert into TEST (A, B) values (?, '" + b "') ");


참고 : http://www.javaservice.com/~java/bbs/read.cgi?b=jdbc&c=r_p&n=1153792017
반응형

'Database > Oracle' 카테고리의 다른 글

오라클 JOIN / ANSI JOIN  (0) 2022.02.03
NLS 파라미터 확인  (0) 2020.11.17
캐릭터셋 확인.  (0) 2011.10.20
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
반응형
select * from nls_database_parameters where parameter like '%CHARACTER%';
OR
select * from v$nls_parameters where parameter like '%CHARACTER%';
NLS_CHARACTERSET 확인.

한글 byte 수 확인.
select lengthb('아') from dual;


KO16KSC5601 : 한글 2byte

한글 완성형 코드와 일치.
2350자의 한글을 25*94 매트릭스에 배열한 문자셋.
4888자의 한자와 히라카나, 카타카나, 그리고 영문 및 각종 기호들을 포함.
유닉스 환경에서는 LANG=ko로 하여 DBCA(Database Configuration Assistant)를 실행할 경우, 자동으로 캐릭터셋을 KO16KSC5601로 지정
아햏햏, 먄하다, 솔믜, 커피숖, 똠방각하 등의 문자는 입력이 제대로 안됨.


KO16MSWIN949 : 한글 2byte

마이크로소프트사의 Windows Codepage 949번, 즉 한글 코드 페이지를 따른 코드셋.
이는 완성형(KO16KSC5601)을 그대로 포함하고 있으며, 추가로 현대 한글 조합으로 표현할 수 있는 모든 가짓수에 해당하는 8822자의 한글을 추가해 포함하고 있다. 그러니까 "Windows-949 캐릭터셋은 KSC5601의 수퍼셋(Superset)"이 되며, 따라서 "KO16MSWIN949 또한 KO16KSC5601의 수퍼셋"이 된다.

"다른 운영 체제에서도 사용할 수 있다!"
운영 체제가 Windows 949 코드 페이지를 지원하지 않는다고 해서, KO16MSWIN949 캐릭터셋을 가진 데이터베이스 인스턴스를 생성할 수 없다는 것은 아니다. 데이터베이스 캐릭터셋과 운영체제의 캐릭터셋은 전혀 별개라고 인식해야 한다. 비록 Windows-949는 특정 업체의 문자셋이기는 하지만, 이를 기반으로 한 KO16MSWIN949 캐릭터셋은 한글 2350자의 한계를 가진 KO16KSC5601의 대안으로 용이하게 이용될 수 있다. 기억하자.
Unix에서든 Linux에서든, KO16MSWIN949 캐릭터셋을 가진 데이터베이스 인스턴스를 생성할 수 있다. 


UTF8/AL32UTF8 : 한글 3byte

UTF8은 유니코드를 구현한 캐릭터셋 중에 가변길이 인코딩 방식을 택하고 있는 캐릭터셋이다.
한 글자를 표현하는데 필요한 바이트의 길이가 최대 3바이트(AL32UTF8의 경우 6바이트)까지 늘어날 수 있다.

유니코드는 현대 한글 11172자를 모두 가나다 순으로 잘 정렬된 상태로 포함하고 있다.
그래도 한글 한 자가 3바이트의 물리적 공간을 차지하므로, 오로지 모든 한글을 지원한다는 이유만으로 사용하는 것은 곤란하다. 하지만, 한글 이외에도 다른 언어들을 함께 데이터베이스에 저장해야 한다면 다른 선택의 여지가 없는 유일한 선택이 된다.


National Characterset

네셔널 캐릭터셋은 유니코드를 지원하지 않는 캐릭터셋을 가진 데이터베이스에서 유니코드를 지원하기 위해 부가적으로 설정할 수 있는 캐릭터셋이다. 즉, 하나의 데이터베이스 인스턴스는 "캐릭터셋"과 "네셔널 캐릭터셋"을 가진다. 처음 시스템 구축 당시와는 달리, 한글 이외의 다른 언어를 급히 저장해야 할 필요성이 있는 경우 네셔널 캐릭터셋을 적절히 활용할 수 있다.

네셔널 캐릭터셋을 가능한 캐릭터셋은 단 두 가지이다. UTF8과 AL16UTF16(기본값).
네셔널 캐릭터셋을 사용하기 위해서는 특정 타입으로 테이블의 컬럼 또는 PL/SQL 변수를 선언해야 한다. CHAR와 VARCHAR2,CLOB에 대응되는 네셔널 캐릭터셋 기반의 타입으로는 NCHAR, NVARCHAR2,NCLOB이 있다.

즉, KO16MSWIN949 데이터베이스에서 다음과 같이 테이블을 생성할 경우,

CREATE TABLE test_table
( varchar_value VARCHAR2(2000),
nvarchar_value NVARCHAR2(2000)
);
"varchar_value" 컬럼에는 KO16MSWIN949에 속하는 글자들만 저장할 수 있는 반면, nvarchar_value 컬럼에는 유니코드에 속한 모든 글자들을 저장할 수 있다.


캐릭터셋 선택의 원칙
한글 지원을 위해서는 반드시 위의 네 가지 캐릭터셋 중에 하나를 선택해야 한다

한국에서만 사용하는 시스템이라면 KO16MSWIN949를 선택한다
한국어 뿐 아니라 중국어, 일본어, 러시아어 등 다양한 언어로 된 데이터를 저장해야 한다면 UTF8, AL32UTF8을 선택한다. 인코딩 변환으로 한국어 기반의 캐릭터셋에 비해 속도의 저하가 있다고 알려져 있다.
대부분이 한글이며, 일부 외국어가 필요하다면, 한국어 기반의 캐릭터셋(KO16MSWIN949)을 사용하되, National Characterset을 이용한 컬럼에 외국어를 저장한다.


NLS_LANG 변수 값 설정
한글을 지원하는 데이터베이스와 통신한다면 반드시 NLS_LANG값을 설정해야 한다.
 NLS_LANG=[언어]_[영역].[캐릭터 셋]

Windows 운영체제에서 한국어 환경을 사용하는 사용자들은 다음과 같이 NLS_LANG 값을 설정할 수 있다.
KOREAN_KOREA.KO16MSWIN949

유닉스 운영체제에서 한국어를 입출력한다면 다음과 같이 NLS_LANG을 설정할 수 있다.
KOREAN_KOREA.KO16KSC5601


참조 Link : http://dba.pe.kr/1524
반응형

'Database > Oracle' 카테고리의 다른 글

NLS 파라미터 확인  (0) 2020.11.17
JDBC 오류?? varchar 에 2000byte 이상 insert 하기.  (0) 2011.11.07
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
[오라클] 버전 확인.  (0) 2009.08.31
반응형

#################
# 오라클 구동 방법 #
#################
 - 참고 사이트 : http://calmmass.tistory.com/246
                       http://blog.naver.com/syun?Redirect=Log&logNo=60008399058


(oracle 계정으로 접속)
$ cd $ORACLE_HOME/bin

# 오라클 시작.
$ ./dbstart

# 리스너 시작.
$ ./lsnrctl start

 


================================================================================================
- 오라클 시작의 또 다른 방법
- 2가지 방법
================================================================================================

------------------------------------------------------------------------------------------------
- 방법 1 : 한번에 구동 완료
------------------------------------------------------------------------------------------------
$ sqlplus '/as sysdba'
SQL> startup
  (한번에 구동 완료. instance -> mount -> open)


------------------------------------------------------------------------------------------------
- 방법 2 : 단계별 구동
------------------------------------------------------------------------------------------------
................................................................................................................................................
[ 1 단계 : instance start ]
................................................................................................................................................
# 인스턴스 상태를 확인 해본 결과 아직 데이터베이스를 기동하지 않았습니다.
SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-01034: ORACLE not available

# instance start
SQL> startup nomount;
ORACLE instance started.

# 파라미터 파일 읽기 시작
# 파라미터 파일 확인
SQL> show parameter processes

# 상태 확인
SQL> SELECT status FROM v$instance;
STATUS
------------------------
STARTED


................................................................................................................................................
[ 2 단계 : mount start ]
................................................................................................................................................
SQL> ALTER DATABASE mount;
Database altered.

SQL> SELECT status FROM v$instance;
STATUS
------------
MOUNTED


................................................................................................................................................
[ 3 단계 : open start ]
................................................................................................................................................
# 데이터베이스 open 시작
SQL> ALTER DATABASE open;
Database altered.

SQL> SELECT status FROM v$instance;
STATUS
------------
OPEN

반응형

'Database > Oracle' 카테고리의 다른 글

JDBC 오류?? varchar 에 2000byte 이상 insert 하기.  (0) 2011.11.07
캐릭터셋 확인.  (0) 2011.10.20
[Link] hierarchy query  (0) 2010.11.09
[오라클] 버전 확인.  (0) 2009.08.31
with as 문.  (0) 2009.07.28
반응형
반응형

'Database > Oracle' 카테고리의 다른 글

캐릭터셋 확인.  (0) 2011.10.20
오라클 구동 방법  (0) 2011.01.05
[오라클] 버전 확인.  (0) 2009.08.31
with as 문.  (0) 2009.07.28
백업 받은 파일로 복구하기.  (1) 2009.07.28
반응형

select * from v$version;

반응형

'Database > Oracle' 카테고리의 다른 글

오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
with as 문.  (0) 2009.07.28
백업 받은 파일로 복구하기.  (1) 2009.07.28
오라클 클라이언트 설치후 리스너 등록  (0) 2009.04.09
반응형

select 문을 가상 view 로 메모리에 저장.
보통 한방 쿼리에서 중복되는 select 문을 사용할때 이용.
(성능효과가 있을수 있음)


WITH
sss as
  (select '7' as s from dual),
eee as
  (select '8' as e from dual)
 
select s from sss where s not in (select e from eee)

반응형

'Database > Oracle' 카테고리의 다른 글

[Link] hierarchy query  (0) 2010.11.09
[오라클] 버전 확인.  (0) 2009.08.31
백업 받은 파일로 복구하기.  (1) 2009.07.28
오라클 클라이언트 설치후 리스너 등록  (0) 2009.04.09
사용자 추가  (2) 2009.04.09
반응형



백업 받아 놓은 파일 : backup.dmp
복구 실행 결과 로그 : log.txt 파일로 남김.

imp userid/passwd FILE=backup.dmp LOG=log.txt


반응형

'Database > Oracle' 카테고리의 다른 글

[오라클] 버전 확인.  (0) 2009.08.31
with as 문.  (0) 2009.07.28
오라클 클라이언트 설치후 리스너 등록  (0) 2009.04.09
사용자 추가  (2) 2009.04.09
테이블 사이즈 구하기  (0) 2009.02.11
반응형


Oracle Net Configuation Assistant


로컬 네트 서비스 이름 구성 -> 추가 -> 버전선택 -> 서비스 이름 작성(아래참조).

 -> TCP -> 호스트 이름 : 서버 주소, 표준 포트 번호 1521 사용 -> 로긴 테스트

 


: 서비스 이름 작성 방법.

오라클 설치 디렉토리/network/admin/listener.ora

에서 SID 또는 GLOBAL_DBNAME 을 입력한다.

반응형

'Database > Oracle' 카테고리의 다른 글

with as 문.  (0) 2009.07.28
백업 받은 파일로 복구하기.  (1) 2009.07.28
사용자 추가  (2) 2009.04.09
테이블 사이즈 구하기  (0) 2009.02.11
merge into = mysql 의 replace 와 비슷한 기능  (0) 2009.02.11

+ Recent posts