SELECT T1.COLUMN_NAME,

       SUBSTR(DATA_TYPE||'('||DATA_LENGTH||')', 0, 20) AS DATA_TYPE,

       DECODE(NULLABLE,'N','NOT NULL', '') AS NULL_STATUS, COMMENTS

FROM ALL_TAB_COLUMNS T1, ALL_COL_COMMENTS T2

WHERE T1.TABLE_NAME = T2.TABLE_NAME

      AND T1.COLUMN_NAME = T2.COLUMN_NAME

      AND T1.TABLE_NAME = 'TB_MEMBER'

ORDER BY COLUMN_ID;


posted by 뚱2

링크: http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html

posted by 뚱2

링크: http://www.thatjeffsmith.com/archive/2012/04/how-to-import-from-excel-to-oracle-with-sql-developer/

posted by 뚱2

링크: http://blog.naver.com/PostView.nhn?blogId=haisins&logNo=140113560535&redirect=Dlog&widgetTypeCall=true

posted by 뚱2
iBatis : ibatis-sqlmap-2.3.4.726.jar
Oracle : 11g

1. select의 경우 resultMap을 만들어준다.
    
    
        
       

    
      


2. insert의 경우 insert into ~~~ select는 안되고 insert into values를 사용해야 한다.
    
    /* ProgramID=updateChangeSeqApprovalOnlyContent */
    UPDATE CHANGESEQ
       SET CONTENT     = #content:CLOB#
    



posted by 뚱2
테스트 데이터가 필요해서 PL/SQL을 이용해서 작성했다.
중간에 값이 맞게 들어가는지 확인하기 위해서 DBMS_OUTPUT.PUT_LINE 함수를 이용했는데
조금 있다가 버퍼오버플로우 에러가...

해결방법은 ( http://psoug.org/reference/dbms_output.html 참조 )
-- default : 20,000
-- max     : 1,000,000
DBMS_OUTPUT.ENABLE(1000000);


posted by 뚱2
값이 계속 틀려서 확인해 보니 두 경우가 다르게 출력된다. 된장 ㅡㅡ;
-- 1을 리턴한다.
SELECT NVL(MAX(SUBJ),0)+1 FROM TLMS_EXAMRESULT;

-- NULL을 리턴한다.
SELECT MAX(NVL(SUBJ,0))+1 FROM TLMS_EXAMRESULT;

결론은 NVL은 제일 마지막에 호출해야 정상적으로 실행된다.
posted by 뚱2
개인적으로 개발할때 좋아하는 폰트는 Dina 폰트 입니다. 소개 ( http://www.donationcoder.com/Software/Jibz/Dina/ )
Toad 폰트가 가변폰트여서 줄맞춤이 힘든데
이번에 Dina 폰트로 변경했습니다.

메뉴 -> View -> Toad Options... -> Editor -> Display -> Fonts -> Editor ... 에서 변경


posted by 뚱2
출처 : http://specialguy.tistory.com/33

-- 결과 : 0011
SELECT TO_CHAR(11, '0999')
  FROM DUAL

- 변환형 함수
TO_CHAR : 숫자나 날짜를 문자열로 변환
TO_NUMBER : 문자를 숫자로 변환
TO_DATE : 문자를 날짜로 변환

- TO_CHAR에서 숫자를 문자로 변환시에 형식에 사용되는 요소
9 : 일반적인 숫자를 나타냄
0 : 앞의 빈자리를 0으로 채움
$ : dollar를 표시함
L : 지역 통화 단위(ex )
. : 소숫점을 표시함
, : 천단위를 표시함
- TO_CHAR에서 날짜를 문자로 변환시에 형식에 사용되는 요소
SCC : 세기를 표시 S는 기원전(BC)
YEAR : 연도를 알파벳으로 spelling
YYYY : 4자리 연도로 표시
YY : 끝의 2자리 연도로 표시
MONTH : 월을 알파벳으로 spelling
MON : 월의 알파벳 약어
MM : 월을 2자리 숫자로 표시
DAY : 일에 해당하는 요일
DY : 일에 해당하는 요일의 약어
DDD,DD,D : 연도,월,일 중의 날짜를 숫자로 표시
HH , HH24 : (1-12) , (0-23)중의 시간을 표시
MI : 분을 표시
SS : 초를 표시
AM(A.M.),PM(P.M.) : 오전인지 오후인지를 표시


TO_CHAR(문자값,‘형식’)
숫자를 문자로 변환 : TO_CHAR(350000,'$999,999')→ $350,000
숫자를 날짜로 변환 : TO_CHAR(SYSDATE,'YY/MM/DD')→ 95/05/25
TO_DATE(문자값, ‘형식’) : TO_DATE('10 SEPTEMBER 1992','DD MONTH YYYY')→10-SEP-92
TO_NUMBER(문자값) : TO_NUMBER('1234')→ 1234


posted by 뚱2

-- SUBSTR([field],[start],[length])
-- field   : 테이블 필드
-- start   : 시작 인덱스 1부터 시작
-- length  : 문자열 개수
-- 예제날짜 : 20111227120000
SELECT SUBSTR('20111227120000', 1, 4) || '-' ||
       SUBSTR('20111227120000', 5, 2) || '-' || 
       SUBSTR('20111227120000', 7, 2)               AS MYDATE
  FROM DUAL

posted by 뚱2



SELECT DISTINCT ST.USN  AS USN
  FROM TLMS_STUDENT    ST
 WHERE 1 = 1
   AND ST.SUBJ = '3'
   AND NOT EXISTS (SELECT *
                     FROM TLMS_SUBJSCM A
                    WHERE 1 = 1 
                      AND A.USN  = ST.USN  
                      AND A.SUBJ = ST.SUBJ )



SELECT DISTINCT ST.USN  AS USN
  FROM TLMS_STUDENT    ST
 WHERE 1 = 1
   AND ST.SUBJ = '3'
   AND ST.USN  NOT IN (SELECT USN
                         FROM TLMS_SUBJSCM A
                        WHERE 1 = 1
                          AND A.SUBJ = ST.SUBJ)


두 쿼리의 실행계획 차이가 없다. 요즘 DB 성능 좋다.
결국 차이는 NULL일때 처리 유무이다.
* NOT IN 구분은 NULL 값을 인식 못한다.
* DBMS는  ORACLE 11G 이다.

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

[Oracle] TO_CAHR, TO_NUMBER, TO_DATE  (0) 2012.01.17
[Oracle] SUBSTR() 함수  (0) 2011.12.27
[Oracle] 집계함수  (0) 2011.12.22
[Oracle] Oracle SQL Developer Debuging  (0) 2011.12.01
[Oracle] TRUNC 절삭 함수  (0) 2011.11.24
posted by 뚱2

[Oracle] 집계함수

DB / NoSQL/Oracle / Toad 2011. 12. 22. 10:10
이름대로 너무도 직관적

SUM : 합계
AVG : 평균
MAX : 최대
MIN : 최소
COUNT : 개수



posted by 뚱2
posted by 뚱2
출처 : http://joeytanya.tistory.com/4


--TRUNC(값[, 포메터])
-- 11.2
SELECT TRUNC(11.22, 1) FROM DUAL;

-- 11
SELECT TRUNC(11.22) FROM DUAL;


-- 포메터를 음수(-)로 지정하면 소수점 이상 자리 절삭 가능
-- 10
SELECT TRUNC(11.22, -1) FROM DUAL; 

-- 110
SELECT TRUNC(111.22, -1) FROM DUAL; 

-- 100
SELECT TRUNC(111.22, -2) FROM DUAL; 

-- 0
SELECT TRUNC(111.22, -3) FROM DUAL; 


posted by 뚱2

-- HOUR
SELECT
  ROUND(((TO_DATE('20111122110000', 'YYYYMMDDHH24MISS')-TO_DATE('20111122100000', 'YYYYMMDDHH24MISS'))*24),3) AS DIFF_HOUR
  FROM DUAL
  ;

-- MINUTE
SELECT
  ROUND(((TO_DATE('20111122110000', 'YYYYMMDDHH24MISS')-TO_DATE('20111122100000', 'YYYYMMDDHH24MISS'))*24*60),3) AS DIFF_MINUTE
  FROM DUAL
  ;

-- SECOND
SELECT
  ROUND(((TO_DATE('20111122110000', 'YYYYMMDDHH24MISS')-TO_DATE('20111122100000', 'YYYYMMDDHH24MISS'))*24*60*60),3) AS DIFF_SECOND
  FROM DUAL
  ;




posted by 뚱2
테이블의 레코드를 랜덤하게 몇개만 뽑을때 유용하다.
EXAM 테이블에서 특정 개수만큼 레코드를 랜덤하게 가져올때

	SELECT INF.EXAMNUM
	  FROM (SELECT EX.EXAMNUM                           /* 문제번호 */
	              ,EX.SUBJ                              /* 과정코드 */
	              ,EX.LESSON                            /* 차시 */
	              ,EX.EXAMTYPE                          /* 문제분류 */
	              ,EX.LEVELS                            /* 난이도 */
	          FROM EXAM EX
	         WHERE 1 = 1
	           AND SUBJ              = #subj#
	           AND TO_NUMBER(LESSON) = #lesson#
	           AND EXAMTYPE          = #examtype#
	           AND LEVELS            = #levels#
	         ORDER BY DBMS_RANDOM.VALUE
	      ) INF
	 WHERE ROWNUM <= TO_NUMBER(TO_CHAR(#examcnt#))



posted by 뚱2
DELETE 쿼리 잘못 작성하고 테이블 날려보신적 있으실 겁니다.
커밋을 하면 이후 복구를 할 수가 없는데 이럴때 유용합니다.
아래와 같이 하면은 30분 전의 데이터를 읽어서 현재 데이터 테이블에 넣어줄수 있습니다.
그렇지만 유비무환 커밋하기전에 꼭 먼저 확인하는게 좋습니다.

-- INTERVAL '30' : 30분 전까지의 데이터를 확인
-- 오라클 설정에 따라 읽을수 있는 시간이 달라질수 있습니다.
INSERT INTO [테이블명]
SELECT * 
  FROM [테이블명] AS OF TIMESTAMP ( SYSTIMESTAMP - INTERVAL '30' MINUTE)




posted by 뚱2

-- ABCD를 출력
SELECT UPPER('abcd') FROM DUAL

-- abcd를 출력
SELECT LOWER('ABCD') FROM DUAL


posted by 뚱2
오라클 성능 및 문제 분석 기능

참고 :  http://l0vemode.tistory.com/158
프리웨어 분석 툴 : http://lite.orascope.net/



posted by 뚱2

[Oracle] Mod 연산

DB / NoSQL/Oracle / Toad 2011. 11. 8. 20:14
출처 : http://www.techonthenet.com/oracle/functions/mod.php

Oracle/PLSQL: Mod Function


In Oracle/PLSQL, the mod function returns the remainder of m divided by n.

The syntax for the mod function is:

mod( m, n )

The mod is calculated as:

m - n * floor(m/n)


Note:

The mod function uses the floor function in its formula, whereas the remainder function uses the round function in its formula.

The mod function returns m if n is 0.


Applies To:

  • Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g

For example:

mod(15, 4) would return 3
mod(15, 0) would return 15
mod(11.6, 2) would return 1.6
mod(11.6, 2.1) would return 1.1
mod(-15, 4) would return -3
mod(-15, 0) would return -15

posted by 뚱2
posted by 뚱2

In Oracle/PLSQL, the to_number function converts a string to a number.

The syntax for the to_number function is:

to_number( string1, [ format_mask ], [ nls_language ] )

string1 is the string that will be converted to a number.

format_mask is optional. This is the format that will be used to convert string1 to a number.

nls_language is optional. This is the nls language used to convert string1 to a number.


Applies To:

  • Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g

For example:

to_number('1210.73', '9999.99') would return the number 1210.73
to_number('546', '999') would return the number 546
to_number('23', '99') would return the number 23

Since the format_mask and nls_language parameters are optional, you can simply convert a text string to a numeric value as follows:

to_number('1210.73'') would return the number 1210.73
posted by 뚱2
posted by 뚱2
일반 프로그래밍에서의 if else와 같은 기능
DECODE([expr], [search1], [result1], [search2], [result2], ...,[default result])

-- 결과 : 3입니다.
SELECT DECODE(3, 1,'1입니다', 2, '2입니다.', 3, '3입니다.', '1-3의 숫자가 아닙니다.')
  FROM DUAL  


posted by 뚱2
CEIL([평가식])    : 평가식의 값보다 크거나 같은 정수의 최소값 (올림 함수)
FLOOR([평가식]) : 평가식의 값보다 작거나 같은 정수의 최대값 (버림 함수)

-- 101을 출력
SELECT CEIL(100.5) FROM DUAL

-- 100을 출력
SELECT FLOOR(100.5) FROM DUAL


posted by 뚱2

-- TO_DATE : 문자열을 받아서 날짜타입으로 변환
-- TO_CHAR : 날짜타입을 문자열로 변환

-- 1.  시스템시간을 이용해서 문자열을 반환한다.
SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHHmmss') as curDate FROM dual

-- 2. 문자열을 특정 포맷에 맞게 출력한다.
--    문자열을 DATE로 변환후에 다시 포맷에 맞게 문자열로 변환
SELECT TO_CHAR(TO_DATE('201111031452','YYYYMMDDHH24MISS'),'YYYY.MM.DD') FROM DUAL





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

[Oracle] DECODE 함수  (0) 2011.11.01
[Oracle] CEIL, FLOOR 함수  (0) 2011.11.01
[Oracle] NVL 함수  (0) 2011.10.21
[Oracle] 테이블, 컬럼 조회  (0) 2011.10.10
[Oracle] oracle em emctl 기동안될때 조치  (0) 2011.04.26
posted by 뚱2

[Oracle] NVL 함수

DB / NoSQL/Oracle / Toad 2011. 10. 21. 13:46
출처 : http://pplane.net/ref/oracleREF/www.statwith.pe.kr/ORACLE/functions095.htm
-- expr1이 null이라면 expr2로 대치한다.
SELECT NVL([expr1],[expr2]) FROM dual



posted by 뚱2
-- 테이블명 조회
SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE='TABLE'

-- 컬럼 조회
SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE
  FROM COLS
 WHERE TABLE_NAME = '테이블명'


-- 컬럼 찾기
SELECT * FROM COLS
WHERE 1=1
  AND TABLE_NAME  LIKE '%' || UPPER([테이블명]) || '%'
  AND COLUMN_NAME LIKE '%' || UPPER([컬럼명]) || '%';

-- 테이블 찾기
SELECT *
  FROM USER_OBJECTS
 WHERE 1 = 1
   AND OBJECT_TYPE = 'TABLE'
   AND OBJECT_NAME LIKE '%' || UPPER([테이블명]) || '%';  



posted by 뚱2
-- 예제
-- MSSQL 2000이하에서는 안된다네요.
SELECT ROW_NUMBER() OVER( ORDER BY columnname ) AS ROWNUM
  FROM tablename

성능상의 문제가 있다고 하는데 우선 급한데로 유용하게 써먹을 수 있을 것 같다.

'DB / NoSQL > MSSQL' 카테고리의 다른 글

[MSSQL] 언어 타입 변경하기  (0) 2012.04.20
[MSSQL] SQL Server Management Studio 단축키  (0) 2012.04.04
[MSSQL] CONVERT TYPE 0~200  (0) 2011.09.28
[MSSQL] 문자열 자르기  (0) 2011.09.15
[MSSQL] Alter Table  (0) 2011.09.02
posted by 뚱2

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

[Oracle] NVL 함수  (0) 2011.10.21
[Oracle] 테이블, 컬럼 조회  (0) 2011.10.10
[Oracle] Oracle 10g Unintall  (0) 2011.04.26
[Oracle] 테이블 목록 조사하기  (0) 2011.04.07
[Oracle] Oracle typeof ??  (0) 2011.02.15
posted by 뚱2