oracle의 Spool 명령어를 가지고 잔머리를 굴려서 생각해낸 방법

 

spool 명령으로 테이블의 데이터를 파일로 출력하는 방법이다.

 

다음의 내용을 sql 확장자 파일로 저장한다.

 

getList.sql의 내용 ▽

 

set echo off                 // 실행하는 SQL문을 출력하지 않는다.

 

set pages 0                // 한페이지로 지정할 라인 수. 0으로 입력시 heading, page break, title을 표시하지 않는다.

 

set trimspool on          // 라인 뒤 공백을 제거한다.

 

set colsep ','              // 컬럼 간 데이터 구분자

 

set lines 30000            // 한 라인에 표시할 글자 수

 

set termout off             // 실행한 sql문을 보이지 않음

 

set feed off                 // SQL문으로 실행한 결과 건수를 보이지않음

 

 

spool /경로/list.txt;      // 저장할 파일명 및 경로 지정

 

select * from 테이블명;  // 추출할 쿼리 (쿼리작성시 중간에 빈칸(빈줄)이 들어가면 안됨

 

spool off                      // 화면출력저장 종료

 

quit                            // 오라클을 빠저나온다.

 

 

 

파일을 저장한 후 다음과 같이 실행하면 지정한 경로에 파일이 생성된다.

- 내 컴퓨터에 있는 DB에 접속할경우

sqlplus userid/passwd @getList.sql

 

 - 외부(다른네트워크)에 있는 오라클에 접속할경우

 

sqlplus userid/passwd@otherDB @getList.sql


- 참고 -

http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12040.htm#i2698970

http://ss64.com/ora/syntax-sqlplus-set.html

 

 

sqlplus를 쓸일이 없으니 ..... 기본조차 모르고... ㅠㅠ 

tnsnames.ora에 TNS를 설정하고

 

 

 

 

 

△ 위와 같이 명령어를 입력한다.

id/pass 부분은 원격으로 접속하는 DB에 등록 되어 있는 id와 pass를 입력하고 @ 뒤에는 위에서 변경해준

이름을 넣어준다.

ex) sqlplus lee/123@GOLDSTAR

 

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

Oracle Split Function 구현  (0) 2017.06.20
DOS Mode (CMD) 창에서 Query 결과를 File로 Export  (0) 2014.06.04
오라클 정규식 (REGEXP)의 사용  (3) 2014.06.04
오라클 케시 지우기  (0) 2014.06.04
오라클 엔터값 처리  (0) 2014.06.04

10g 이상부터 가능

--------------------------

★ 오라클 정규식 사용 팁
Oracle 10g에서는 REGEXP_로 시작하는 함수를 지원합니다.
Regular Expression이라고 하죠~

 

1. REGEXP_LIKE
- LIKE 연산자와 유사하며, 표현식 패턴(Regular Expression Pattern)을 수행하여, 일치하는 값을 반환합니다.
- 문법 : REGEXP_LIKE(srcstr, pattern [,match_option])
- srcstr : 소스 문자열, 검색하고자 하는 값.

- pattern : Regular Expression Operator를 통해 문자열에서 특정 문자를 보다 다양한 pattern으로 검색하는 것이 가능.
- match_option : match를 시도할 때의 옵션. 찾고자 하는 문자의 대소문자 구분이 기본으로 설정. 대소문자를 구분할 필요가 없다면 'i' 옵션 사용을 지정한다.
[[:digit:]] : 숫자인 것.
[^[:digit:]] : 숫자가 아닌 것.

[^expression] : expression의 부정.

[ ] : []안에 명시되는 하나의 문자라도 일치하는 것이 있으면 나타냄.
- 예제 1

SELECT SSN
FROM test
WHERE REGEXP_LIKE(SSN, '[^[:digit:]]');

SSN
--------------------
******2229198
******2047888
******2349876

- 예제 2 : 제품의 이름 중에 'SS' 다음에 'P'를 포함하지 않은 문자열을 찾자.

SELECT product_name

FROM oe.product_information

WHERE REGEXP_LIKE(product_name, 'SS[^P]');

- 예제 3 : 제품 이름에 'SS' 다음 'P'나 'S'를 포함하는 문자열을 찾자.

SELECT product_name

FROM oe.product_information

WHERE REGEXP_LIKE(product_name, 'SS[PS]');

 

- 예제 4 : 메일 주소에 '@'이 포함되도록 설정.

ALTER TABLE customers

ADD CONSTRAINT cust_email_addr

CHECK(REGEXP_LIKE(cust_email, '@')) NOVALIDATE;

※ 참고 : 제약조건 해제

ALTER TABLE customers

DROP CONSTRAINT cust_email_addr;

 

 

2. REGEXP_SUBSTR
- SUBSTR 함수의 기능을 확장하였습니다. 주어진 문자열을 대상으로 정규 표현식 패턴을 수행하여, 일치하는 하위 문자열을 반환합니다.
- 문법 : REGEXP_SUBSTR(srcstr, pattern, [,position[,occurrence[,match_option]]])
- srcstr : 소스 문자열
- position : Oracle이 문자열에서 특정 문자를 어디에서 찾아야 하는지 위치를 나타냄. 기본으로 1로 설정되어 있으므로, 문자열의 처음부터 검색을 시작.
- occurrence : 검색하고자 하는 문자열에서 특정 문자의 발생 횟수. 기본으로 1로 설정되어 있으며, 이는 Oracle이 문자열에서 첫번째 발생 pattern을 찾는다는 의미.
- match_option : match를 시도할 때의 옵션
- 예제

SELECT REGEXP_SUBSTR(email, '[^@]+', 1, 1) AS "ID"
, REGEXP_SUBSTR(email, '[^@]+', 1, 2) AS "MailAddr"
FROM ( SELECT
'hellokitty@empal.com' email
FROM dual );


ID MailAddr
---------------------

hellokitty empal.com

 

 

3. REGEXP_REPLACE
- 주어진 문자열을 대상으로 정규 표현식 패턴을 조사하여, 다른 문자로 대체합니다.
- 문법 : REGEXP_REPLACE(srcstr, pattern [,replacestr[,position[,occurrence[,match_option]]]])
- replacestr : 대체하고자 하는 문자열을 나타냅니다.
- 예제 1 : 주민번호 뒷자리를 '*'로 표현

SELECT REGEXP_REPLACE(SSN, '[0-9]', '*', 7) AS "SSN"
FROM ( SELECT '7907051234567' SSN
FROM dual );

SSN
-------------
790705*******

- 예제 2 : 둘 이상의 공백 문자를 하나로 대체하여 가독성을 높이자.
SELECT REGEXP_REPLACE('Oracle is the Information Company', '( ){2,}', ' ') AS "Result"
FROM dual;


RESULT
-----------------------------------
Oracle is the Information Company
- 예제 3 : 전화번호의 표현 방식을 3자리, 3자리, 4자리로 묶어 식별력을 높이자.

SELECT REGEXP_REPLACE('555.123.4567','([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})','(\1) \2 - \3') AS "Result1"

FROM dual;

 

Result1

----------------

(555) 123 - 4567

-. [:digit:] : 숫자 값.
-. [:alpha:] : 문자 값.
-. [:alnum:] : 문자와 숫자를 함께 사용.

 

4. REGEXP_INSTR
- 정규 표현을 만족하는 부분의 위치를 반환합니다.
- 문법 : REGEXP_INSTR(srcstr, pattern [,position[,occurrence[,returnparam[,match_option]]]])
- position : 검색 시작 위치
- occurrence : 발생 횟수.
- returnparam : 반환 옵션.
- match_option : match를 시도할 때의 옵션.
-. 예제

SELECT REGEXP_INSTR('Regular Expression', 'a') AS "REGEXP_INSTR"
FROM dual;


REGEXP_INSTR
---------------
6

 

※ 참고 site

Oracle Database Documentation Library

http://www.oracle.com/pls/db10g/homepage

C Oracle Regular Expression Support

http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/ap_posix.htm

 

 

 

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

DOS Mode (CMD) 창에서 Query 결과를 File로 Export  (0) 2014.06.04
SQLPLUS로 다른 네트워크에 접속하기  (0) 2014.06.04
오라클 케시 지우기  (0) 2014.06.04
오라클 엔터값 처리  (0) 2014.06.04
테이블 설계시 참고사항  (0) 2014.06.04

쿼리를 짜다가 보면 속도가 느렸는데 빨라져있는 경우가 있다.

그건 옵티마이저 케시에서 쿼리가 돌아서 그러한것이다. 그래서 케시에 돌지 않은 상태를 확인하기 위해 쿼리를 튜닝할 때

다음과 같은 명령으로 케시를 지우고 작업할 수 있다.

 

아마도 10g 이하는 안되는걸로 알고있다.

 

 

1. ALTER SYSTEM FLUSH SHARED_POOL;

2. ALTER SYSTEM FLUSH BUFFER_CACHE;

 

보통 플러그인을 이용하거나해서 한동안 잊고 살았던 엔터값 처리

찾으러다니기 귀찮아서 한벅 적어본다.. 

 

replace(description, chr(13)||chr(10), '\n')

 

 

1. 명사를 나열하여 리스트업 한다.

2. 테이블을 생성시에는 PK는 적을수록 좋다

 

3. 중복되는 컬럼은 다른테이블로 빼서 관리한다 (마스터 / 디테일 처럼)

 

4. 오라클은 테이블당 컬럼 갯수가 255개 까지 가능하지만 컬럼의 갯수는 적을수록 좋다.

 

5. 기본적으로 컬럼에 null 값이 들어가지 않는 형태로 설계한다.

 

6. 테이블 명 / 컬럼명 / 펑션명등은 최대 30자 까지만 가능하다.

 

※ 행안부 사이트에 행정데이터 관리시스템 www.adams.go.kr 에 가면 행정용어사전, Data type 표준안 등등의 자료를 구할 수 있다.

해당 사이트가 사라져서 혼란을 막기위해 해당 링크는 제거합니다.

 

+ Recent posts