- Rename패키지, 클래스, 메서드, 필드, 변수, 파라미터의 이름을 바꾸는 데 사용할 수 있으며, 코드의 내용과 관계가 없는 프로젝트 이름이나 소스 폴더의 이름도 이 기능으로 바꿀 수 있다.
- Move메서드나 필드가 잘못된 클래스에 속해 있어 이를 적절한 다른 클래스로 옮기고 싶을 수 있다. 또는 어떤 패키지에 속해 있는 클래스를 다른 클래스로 옮기고 싶은 경우도 있다. 이런 경우에 Move 리팩터링을 사용할 수 있다.
클래스를 다른 패키지로 이동클래스를 다른 클래스로 옮기고 싶을 때는 에디터나 패키지 탐색기에서 클래스를 선탟한 다음 Refactor>Move를 선택하여 나타나는 대화상자에서 현재 선택한 클래스가 위치할 패키지를 선택한 다음 확인 버튼을 누르면 된다.메서드/필드를 다른 클래스로
새로운 패키지를 만들고 그 패키지로 클래스를 옮기고 싶을 때는 중간에 있는 New 버튼을 사용하면 된다. 클래스를 다른 패키지로 옮기는 작업은 패키지 탐색기에서 드래그/드랍을 이용할 수도 있다.어떤 클래스에 포함되어 있는 메서드나 필드를 다른 클래스로 옮기고 싶을 때도 Move 리팩터링을 할 수 있다. 에디터나 패키지 탐색기, 또는 Outline 뷰에서 옮기고자 하는 메서드나 필드를 선택한 다음 메뉴바나 컨텍스트 메뉴의 Refactor>Move를 이용한다.패키지를 다른 프로젝트로패키지 탐색기에서 옮기고자 하는 패키지를 선택한 다음 컨텍스트 메뉴에서 Refactor>Move를 선택하거나 단축키를 이용한다. 다이얼로그에서 이동 목표가 되는 프로젝트에 있는 소스 폴더를 선택하면 된다.프로젝트를 다른 위치로패키지 탐색기에서 프로젝트를 선택한 다음 Refactor>Move를 선택하면 된다. 그리고 다이얼로그의 Use Default location 체크박스에서 선택을 해제하면 새로운 위치를 지정할 수 있다.
프로젝트를 옮길 때 다이얼로그에서 지정한 디렉터리로 현재 프로젝트 내의 모든 리소스가 이동하므로, 다른 파일과 섞이지 않도록 디렉터리를 잘 선택해야 한다. - Change Method Signature메서드의 시그너처가 마음에 들지 않는 경우에는 Change Method Signature 리팩터링을 이용할 수 있다. 이 리팩터링에서는 메서드 이름, 접근 지정자, 리턴 타입, 파라미터 이름, 파라미터 순서를 변경할 수 있고, 새로운 파라미터를 추가하거나 불필요한 파라미터를 제거할 수 있다.
- Convert Anonymous to Nested익명 클래스는 편리하게 사용할 수 있지만, 크 클래스에서 복잡한 작업을 처리한다거나, 이 클래스의 인스턴스를 다른 곳에서도 사용할 필요가 있는 경우에는 이 클래스에 이름을 부여하여 사용하는 편이 좋을 것이다. 이럴 때 Convert Anynymous to Nested를 사용하여 익명 클래스를 내부 클래스로 변환할 수 있다.


- Move Member Type to New File
처음에는 어떤 클래스 컨텍스트 안에서만 의미 있는 작업을 처리하기 위해 내부 클래스를 정의했는데, 시간이 지나면서 그 내부 클래스가 처리하는 작업이 많아지고, 그 클래스 컨텍스트 밖에서도 충분히 유효한 의미를 지니게 되었다면, 그 클래스를 독립시키는 편이 좋을 것이다. 이럴 때 Move Member Type to New File 리팩터링을 사용할 수 있다.- Push Down
수퍼클래스에 정의된 메서드나 필드가 서브클래스의 일부에서만 사용된다면 그 메서드나 필드는 실제 사용된느 서브클래스로 옮겨져야 한다. 이럴 때 사용할 수 있는 것이 Push Down 리팩터링이다.- Push Up
같은 수퍼클래스를 가지는 서브클래스에 동일한 필드를 가지고 있거나, 동일한 작업을 하는 메서드가 정의되어 있다면 이는 중복이다. 따라서 이런 필드나 메서드를 수퍼클래스로 옮기는 것이 좋다. 이 때는 Pull Up을 이용해 작업할 수 있다.- Extract Interface
어떤 클래스 인터페이스의 동일한 부분집합을 여러 클라이언트에서 사용하고 있거나, 두 개 이상의 클래스가 공통된 인터페이스를 가지는 부분이 있다면, 그 부분집합을 인터페이스로 뽑아낼 수 있다.
인터페이스를 추출하는 방법은 매우 간단하다. 클래스 이름을 선택한 다음에 메뉴바나 컨텍스트 메뉴에서 Refactor>Extract Interface를 선택하고, 다이얼로그에서 새로 만들 인터페이스의 이름을 정한 후 메서드 리스트에서 새로운 인터페이스에 포함될 메서드를 선택하면 된다.- Generalize Type
변수 선언부, 파라미터, 메서드 리턴 타입 등에서 타입을 일반화한다.- Use Supertype Where Possible
어떻게 보면 Generalize Type 리팩터링과 비슷한 것 같기도 하다. 그러나 Generalize Type과 Use Supertype Where Possible은 리팩터링이 적용되는 범위가 다르다. Generalize Type 리팩터링은 선택한 변수나 파라미터으 레퍼런스를 사용하는 곳을 조사해 리팩터링을 적용하므로 적용 범위는 해당 변수나 파라미터를 참조하는 곳으로 제한된다. 그러나 Use Supertype Where Possible 리팩터링은 선택한 클래스를 사용하는 모든 곳에 대해 지정한 수퍼타입을 사용할 수 있는지 조사하고 그에 대해 리팩터링을 적용하므로 영향을 받는 범위가 훨씬 넓다.- Infer Generic Type Arguments
?J2SE 5.0 부터는 가독성과 정적 타입 안정성 개선을 위해 제너릭을 사용할 수 있다. Infer Generic Type Arguments는 Java Collection Framework를 사용하는 코드를 제너릭을 사용하도록 변환해 주는 리팩터링이다.
Infer Generic Type Arguments 리팩터링은 리팩터링할 코드를 에디터에 열어 놓은 다음 메뉴바의 Refactor>Infer Generic Type Arguments를 선택해 실행하면 된다.- Inline
어떤 메서드는 너무 단순하고 내용도 명확하여 굳이 메서드로 되어 있을 필요가 없는 경우도 있다. 이런 경우는 해당 메서드를 제거하고 메서드 호출부에 메서드의 코드를 직접 넣는 것이 더 명확할 수 있다. Inline은 바로 이런 경우에 사용하는 리팩터링이다.- Extract Method
메서드 내의 일정 코드 블럭을 다른 메서드로 뽑아낼 때 사용- Extract Local Variable
수식이 복잡한 경우 수식 일부를 임시 변수로 뽑아낼 때 사용- Extract Constant
특별한 의미가 있는 숫자 리터럴이나 문자열이 있으면, 코드에 이를 직접 쓰는것 보다는 상수를 정의하고 이를 사용하는 것이 좋다. 상수로 정의해 두면 의미와 목적이 명확해질 뿐 아니라 나중에 상수 값을 바꿔야 하는 경우 실수할 확률을 줄일 수 있다. 이 때 사용하는 리팩터링이 extract Constant 리팩터링이다.- Introduct Parameter
메서드 내에서 사용하는 특정 값이나 어떤 값을 리턴하는 수식을 메서드의 파라미터로 받도록 바꾸고 싶을 때 사용할 수 있다.- Introduce Factory
클래스의 생성자를 private 또는 protected로 만들고 static 팩터리 메서드를 추가하고, 생성자를 호출하는 부분은 모두 팩터리 메서드를 호출하도록 바꾼다.- Convert Local Variable to Field
지역 변수로 쓰이던 것을 필드로 바꾸고 싶을 때 사용할 수 있다.- Encapsulate Field
public으로 선언되어 있는 필드를 private으로 바꾸고 get/set 메서드를 통해 접근하도록 하는 리팩터링이다. - Move Member Type to New File
- 2010/04/18 22:18
- ssongka.egloos.com/2575501
- 덧글수 : 0
- 2010/04/11 23:21
- ssongka.egloos.com/2571910
- 덧글수 : 0
- 2009/10/28 00:47
- ssongka.egloos.com/2464848
- 덧글수 : 0
* 단일 행 함수
-함수가 정의된 SQL문이 실행될 때 각각의 ROW에 대해 수행되며 ROW 당 하나의 결과를 리턴 해줍니다.
-인수로는 상수,변수,표현식들이 사용될 수 있습니다.
-SELECT,WHERE,ORDER BY 절에 사용할 수 있습니다.
구 분 | 함수 | 내 용
---------------------------------------------------------------------------------------
LOWER 모든 문자를 소문자로
UPPER 모든 문자를 대문자로
INITCAP 첫 글자는 대문자,나머지는 소문자로
CANCAT 첫 번째 문자와 두 번째 문자를 연결
SUBSTR 문자의 길이를 리턴할 때
LENGTH 문자의 길이를 리턴할 때
NVL 널값을 다른 값으로 대체할 때
NVL2 조건에 의해 널값을 다른 값으로 대체할 때
SUBSTR 특정 문자의 문자열중 필요 부분만 선별하여 사용
문자 RTRIM 서브 스트림의 정확한 위치와 길이를 요구(오른쪽)
함수 LTRIM 서브 스트림의 정확한 위치와 길이를 요구(왼쪽)
RPAD 문자열을 제외한 공간에 지정한 문자열로 대체(오른쪽)
LPAD 문자열을 제외한 공간에 지정한 문자열로 대체(왼쪽)
TRANSLATE 첫 문자는 탐색집합의 첫 문자로 대체(2번째도 동일)
REPLACE 특정 문자열을 다른 문자열로 대체
SOUNDX 같은 단어 또는 유사한 사운드 단어를 음성학적으로
LENGTH 문자의 실제 길이를 변환할 때
LENGTHB 문자열의 실제 길이를 변환할 때
INTSTR 문자열 내의 특정 스트림의 위치
NULLIF 조건이 같으면 NULL,다르면 지정된 값을 리턴할 때
COALESCE 조건에 따라 여러 가지 값을 리턴할 때
-----------------------------------------------------------------------------------------
시스템 USER 현재 DB 사용자
함수 USERID 현재 DB 사용자에게 할당되는 사용자번호
-----------------------------------------------------------------------------------------
*문자함수의 예제
EX) -2개의 문자값을 결합합니다.
SQL>SELECT CONCAT(CONCAT(ename, ' is a '),job)
FROM emp;
CONCAT(CONCAT(ENAME,'ISA
---------------------------------
SMITH is a CLERK
ALLEN is a SALESMAN
-정의된 문장 단어의 첫 번째 문자를 대문자로 변환
SOL> SELECT INITCAP( 'the soap') FROM DUAL;
INITCAP(
-----------
The Soap
-정의된 문장의 왼쪽 나머지 공간을 지정한 문자로 채웁니다.
SQL> SELECT LPAD( 'Page 1' , 15 , '*.') FROM DUAL;
LPAD( 'PAGE1',15
---------------------
*.*.*.*.*Page 1
-정의된 문장의 왼쪽부터 지정된 단어가 발견되면 제거합니다.
SQL> SELECT LTRIM( 'xyxXxyLAST WORD','xy') FROM DUAL;
LTRIM('XYXXX
-------------------
XxyLAST WORD
-정의된 문장에서 해당 문자가 발견되면 지정된 문자로 변경합니다.
SQL> SELECT REPLACE( 'JACK and JUE' , 'J' , 'BL') FROM DUAL;
REPLACE( 'JACKA
-----------------------
BLACK and BLUE
-정의된 문자의 오른쪽 나머지 공간을 지정한 문자로 채웁니다.
SQL> SELECT RPAD(ename, 11 ,'ab' ) FROM emp WHERE ename = 'TURNER' ;
RPAD(ENAME , 11 ,'AB')
---------------------------
TURNERababa
-정의된 문자의 오른쪽부터 지정된 단어가 발견되면 제거합니다.
SQL> SELECT RTRIM( 'TURNERyxXxy' , 'xy') FROM DUAL ;
RTRIM( 'TU
-------------
TURNERyxX
-정의된 문장의 지정된 위치부터 해당 길이 만큼만 추출합니다.
SQL> SELECT SUBSTR( 'ABCDEFG' , 3 , 2 ) FROM DUAL ;
SU
-------
CD
-정의된 문장의 뒤에서부터 지정된 위치의 해당 길이 만큼만 추출합니다.
SQL> SELECT SUBSTR ( 'ABCDEFG' , -3 , 2 ) FROM DUAL ;
SU
--------
EF
-문자 'Q'를 ASCII 코드로 변환합니다.
SQL> SELECT ASCII ( 'Q' ) FROM DUAL ;
ASCII ( 'Q' )
---------------
81
-정의된 문장에서 지정된 위치에 존재하는 문자의 위치 값을 찾아 줍니다.
SQL> SELECT INSTR ( 'CORPORATE FLOOR' , 'OR' ,3 ,2 ) FROM DUAL ;
INSTR ( 'CORPORATEFLOOR' , 'OR' , 3 , 2 )
---------------------------------------------
14
-정의된 문장의 길이를 변환합니다.
SQL> SELECT LENGTHB ( '가나다라마바사') FROM DUAL ;
LENGTH( '가나다라마바사' )
---------------------------
14
-정의된 단어 중에 가장 높은 값을 찾아줍니다.
SQL> SELECT GREATEST ( 'HARRY' , 'HARIOT' ,'HALORD' ) FROM DUAL ;
GREAT
---------
HARRY
-정의한 컬럼이 NULL이면 지정한 값으로 대체합니다.
SQL> SELECT NVL (sal , 0 ) , NVL( ename , '*' ) , NVL(hiredate , '01-JAN-02' ) FROM emp ;
NVL(SAL , 0 ) NVL(ENAME , NVL(HIRE
------------------------------------------------
800 SMITH 80/12/17
*시스템 함수
-현재 어떤 사용자로 데이터 베이스에 접속하였는지 알 수 있습니다.
SQL> SELECT USER FROM dual ;
USER
-------
SCOTT
* 숫자함수/날짜함수
------------------------------------------------------------------------------
구 분 함 수 내 용
------------------------------------------------------------------------------
ROUND 해당 소수점 자리에서 반올림할 때
TRUNC 해당 소수점 자리에서 절삭할 때
MOD(m/n) m을 n으로 나누고 남은 나머지를 리턴할 때
ABS 숫자 값을 절대값으로 바꾼다
SIGN 숫자가 양수:+1, 음수:-1, 0:0
숫자함수 FLOOR 실수값을 정수값으로
CEIL 그 수보다 가장 크거나 작은값을 리턴
POWER 해당 수에 대한 지수값을 표현
LOG 로그값으로 변환
SIN SIN값
COS COS값
TAN TAN값
------------------------------------------------------------------------------
SYSDATE 현재 시스템 날짜를 보여줄 때
ADD_MONTHS 지정한 날짜에 몇 월을 추가한 결과의 월을 계산할 때
LAST_DAY 해당 월의 마지막 날짜를 알고자 할 때
날짜함수 NEW_TIME 해당 표준시로 시간을 변환할 때
NEXT_DAY 해당 날짜의 다음 지정한 날짜로 현환할 때
NONTH_BETWEEN 지정된 월 간의 월수를 알고자 할 때
------------------------------------------------------------------------------
* 숫자함수 예제....
-정의된 값을 절대값으로 변환 합니다
SQL> SELECT ABS(-15) FROM DUAL ;
ABS(-15)
-----------
15
-정의된 값의 올림된 값으로 변환합니다
SQL> SELECT CEIL(15.7) FROM DUAL ;
CEIL(15.7)
-------------
16
-정의된 값의 내림된 값으로 변환합니다
SQL> SELECT FLOOR(15.7) FROM DUAL ;
FLOOR(15.7)
---------------
15
-정의된 산술식의 COSINE 값으로 변환합니다
SQL> SELECT COS(180*3.14/180) FROM DUAL ;
COS(180*3.14/180)
--------------------
-.99999873
-정의된 숫자의 지수승값을 계산합니다
SQL> SELECT EXP(4) FROM DUAL ;
EXP(4)
---------
54.59815
-뒤에 정의된 수로 앞에 정의된 수를 나눈 나머지 값을 반환합니다
SQL> SELECT MOD(11,4) FROM DUAL ;
MOD(11,4)
------------
3
-정의된 수를 지정한 자리 수에서 반올림합니다
SQL> SELECT ROUND(15.193 , 1) FROM DUAL ;
ROUND(15.193 , 1)
-------------------
15.2
-정의된 값이 음수이면 -1 , 0 이면 0, 양수이면 1을 리턴합니다
SQL> SELECT SIGN(-15) FROM DUAL ;
SIGN(-15)
------------
-1
-정의된 수를 지정한 자리 수 에서 절삭합니다
SQL> SELECT TRUNC(15.97 , 1) FROM DUAL ;
TRUNC(15.79 , 1)
-----------------
15.7
* 날짜 함수 예제
-현재 시스템 날짜를 제공합니다
SQL> SELECT SYSDATE FROM DUAL ;
SYSDATE
-----------
06/11/13
-해당 날짜에 지정한 달 수만큼 더합니다
SQL> SELECT HIREDATE , ADD_MONTHS(HIREDATE , 1)
FROM EMP WHERE EMPNO = 7782 ;
HIREDATE ADD_MONT
--------------------------
81/06/09 81/07/09
-정의된 날짜의 달에서 마지막 일이 몇 일인지 알 수 있습니다
SQL> SELECT HIREDATE , LAST_DAY(HIREDATE)
FROM EMP WHERE EMPNO = 7782 ;
HIREDATE LAST_DAY
--------------------------
81/06/09 81/06/30
-정의된 두 날짜간의 차이 값을 알 수 있습니다
SQL> SELECT HIREDATE , MONTHS_BETWEEN(SYSDATE , HIREDATE)
FROM EMP WHERE EMPNO = 7782 ;
HIREDATE MONTHS_BETWEEN(SYSDATE , HIREDATE)
------------------------------------------------------------
81/06/09 252.930883
-정의된 날짜를 녀도 값을 기준으로 반올림 합니다
SQL > SELECT
ROUND(TO_DATE(' 27-OCT-98' , 'DD-MON-YY' ) ,
'YEAT' ) FROM DUAL ;
ROUND(TO
------------
99/01/01
변환 함수
---------------------------------------------------------------------------
구 분 함 수 내 용
---------------------------------------------------------------------------
TO_CHAR 숫자,날짜 타입의 Data를 varchar2타입으로 변환
변환함수 TO_NUMBER 숫자를 포함하는 문자 String을 number 타입으로 변환
TO_DATE 문자 String을 날짜 타입으로 변환
---------------------------------------------------------------------------
*날짜 형식 요소
---------------------------------------------------------------------------
형식 요소 설 명
---------------------------------------------------------------------------
MM 달 수(ex : 10)
MON 월 이름을 3자리 문자로 표현(ex : JAN , FEB , MAR 등)
MONTH 월 이름(ex : JANUARY,FEBUARY,MARCH 등)
DD 날짜 (ex : 14)
D 주의 일수 (ex : 4)
DY 요일 이름을 3자리 문자로 표현(ex : SUN , MON , TUE 등)
DAY 요일 이름(ex : SUNDAY , MONDAY 등)
YYYY 년도 4자리 수 (ex : 2002)
YY 년도의 마지막 2자리(ex : 02)
----------------------------------------------------------------------------
*시간 형식 요소
----------------------------------------------------------------------------
형식 요소 설 명
----------------------------------------------------------------------------
9 숫자(ex : 9999 → 1534)
0 자리 수가 비면 0으로 채워줌 ( ex : 09999 → 01534 )
$ 금액에 $를 표시해줌 (ex : $99999 → $1534 )
. 명시한 위치에 소수점을 표시함 (ex : 99999.99 → 1534.00 )
, 명시한 위치에 콤마를 표시함 (ex : 999,999 → 1,534 )
----------------------------------------------------------------------------
변환 함수 예제들.....
-현재 날짜가 한 주에서 몇번째 일인지 알 수 있습니다
SQL> SELECT SYSDATE , TO_CHAR ( SYSDATE , 'D' )
FROM dual ;
SYSDATE TO_CHAR
--------------------------
02/09/26 5
-정의된 날짜의 출력 포맷을 DD-MM-YY로 출력합니다
SQL> SELECT ename , TO_CHAR(hiredate , 'DD-MM-YY' ) HIREDATE
FROM emp ;
ENAME TO_CHAR(hiredate , 'DD-MM-YY' )
------------------------------------------------
SMITH 17 11 90
ALLY 20 02 91
......................
-일자를 출력할 때 0 값을 제거합니다(09 → 9 , 01 → 1)
SQL> SELECT ename , TO_CHAR (hiredate , 'fmDD-MM-YY' ) HIREDATE
FROM emp ;
ENAME TO_CHAR(hiredate , 'fmDD-MM-YY' )
---------------------------------------------------
....................................
MARTIN 9 09 91
....................................
-문자 100을 숫자값으로 출력합니다
SQL> SELECT TO_NUMBER ( '100' ) FROM dual ;
TO_NUMBER
--------------
100
-현재 시간을 AM , PM 표기법으로 출력합니다
SQL> SELECT TO_CHAR( SYSDATE , 'AM HH:MI ' )
FROM dual ;
TO_CHAR(
-----------
오전 10 : 10
-숫자값을 출력할 때 금액표시를 합니다
SQL> SELECT TO_CHAR( 12506 , '$9099,999' ) FROM dual ;
TO_CHAR(
-----------
$010,234
-정의된 날짜를 지정한 포맷으로 출력합니다
SQL> SELECT TO_DATE( '01-JUL-99' , 'DD-MM-YY' )
FROM dual ;
TO_DATE(
-----------
99/07/01
-정의된 시간을 지정한 포맷으로 출력합니다
SQL> SELECT TO_DATE( '01:30' , 'HH24:MI' ) FROM dual ;
TO_DATE
----------
13:30
단일행함수
* NVL2 ( Colum, Express1, Express2 )
-해당 컬럼이 null이면 Express-2 의 값을 , null이 아니면 Express-1의 값을 리턴해 줍니다.
오라클 이전 버전에서 사용되던 NVL함수는 정의된 컬럼의 값이 null인 경우 지정한 값으로
대체하는 기능을 가지고 있었습니다. 반대로, NVL2 함수는 정의된 컬럼의 값이 지정한
값인 경우 null값으로 대체된다.
NVL2 함수는 해당 컬럼이 null 값이 아니면 Express2의 값을 리턴해 주고 null 값이면
Express3의 값을 리턴해 주는 기능을 가지고 있습니다.
SQL> SELECT empno, ename, nv12( comm, comm.*1.1, 0 )
FROM emp ;
EMPNO ENAME COMM NVL2( COMM, COMM*1.1, 0 )
----------------------------------------------------------
7369 SMITH 0
7499 ALLEN 300 330
7521 WARD 500 550
7566 JONES 0
..............................................
->COMM이 null인 경우 null이 아닌 경우
* NULLIF ( Express1, Express2 )
-Express-1과 Express-2의 값을 비교하여 그 값이 같으면 null을 리턴하고 다르면 Express-1의
값을 리턴해 줍니다.
NULLIF 함수는 Express-1 과 Express-2 의 값을 비교하여 그 값이 같으면 null 값을 리턴하고
서로 다른 값을 가지고 있으면 Express-1의 값을 리턴해 주는 함수입니다.
LENGTH(first_name)의 값과 LENGTH(last_name)의 값을 NULLIF 함수로 비교하여 같으면
null 값을 화면에 출력하고 다르면 LENGTH(first_name)의 값을 화면에 출력합니다.
SQL> SELECT empno, ename, nullif( comm, 0 )
FROM emp ;
EMPNO ENAME COMM NULLIF( COMM, 0 )
--------------------------------------------------
7369 SMITH
7370 ALLEN 300 300
7521 WARD 500 500
7566 JONES
7654 MARTIN 1400 1400
.....................................
->COMM이 NULL이므로 NULL, COMM이 NULL이 아니므로 COMM값으로...
*COALLESCE 함수
이 함수는 EXPRESS-1의 값이 NULL값이 아니면 EXPRESS-1의 값을 화면에 출력해 주고
NULL 값이면 EXPRESS-2의 값을 EXPRESS-1의 값과 EXPRESS-2의 값모두 NULL이면
EXPRESS-N의 값을 화면에 출력해 주는 함수입니다. 문법에서 정의된 각 컬럼에서 NULL이
아닌 첫 번째 컬럼의 값을 돌려줍니다.
SQL> SELECT coalesce( comm,sal ) FROM emp ;
COALESCE( COMM,SAL )
-------------------------
800
300
SQL> SELECT coalesce ( comm, 100 ) FROM emp ;
COALESCE( COMM,100 )
-------------------------
100
300
500
->이 문법은 COALESCE([컬럼],[값]) 문법에서 정의된 컬럼이 NULL이면 정의된 값을
더한 결과를 돌려줍니다. 원래 NULL이지만 100을 더한 값이 출력됩니다.
*TRIM함수
이 함수는 오라클 8i 버전에서 추가된 함수이며 이전 버전에서 제공되던 LTRIM 함수와
RTRIM 함수를 결합한 형태의 함수입니다. TRIM 함수는 문자값의 왼쪽 또는 오른쪽 부분에
정의한 문자값이 존재하면 그 문자를 절삭시키는 기능을 가지고 있습니다. TRIM 함수는
3가지 종류의 기능을 가지고 있습니다.
-먼저,LEADING은 이전의 LTRIM 함수와 동일한 기능을 가지고 있습니다.정의된 컬럼의 값
왼쪽에 해당 문자열이 존재하면 문자값을 절삭시켜서 화면에 출력합니다.
SQL> SELECT ename, TRIM( LEADING 'A' FROM ename ) as TRIM
FROM emp
WHERE ename LIKE 'A%' ;
ENAME TRIM
-------------------------
ALLEN LLEN
ADAMS DAMS
-TRAILING은 이전의 RTRIM 함수의 기능을 가지고 있으며 컬럼값의 오른쪽에 존재하는 문자값을
절삭해줍니다.
SQL> SELECT ename, TRIM( TRAILING 'N' FROM ename ) as TRIM
FROM emp
WHERE ename LIKE '%N' ;
ENAME TRIM
---------------------
ALLEN ALLE
MARTIN MARTI
-BOTH는 왼쪽, 오른쪽에 해당 문자열이 있으면 절삭해 주는 기능을 가지고 있습니다.
SQL> SELECT ename, TRIM( BOTH 'A' FROM ename ) as TRIM
FROM emp
WHERE ename LIKE 'A%' ;
ENAME TRIM
--------------------
ALLEN LLEN
ADAMS DAMS
->ENAME 컬럼에서 마지막 문자가 'A'인 값은 발견되지 않았고 첫번째 문자가 'A'인
사원은 ALLEN과 ADAM
이어지는 내용
- 2009/10/26 16:45
- ssongka.egloos.com/2463930
- 덧글수 : 0
해서
var params = "name="+encodeURIComponent("paramName");
이런식으로 해서 params를 조합해서 보내면 된다.
그럼 서버는?
서버에서는 utf로 읽어야 제대로 읽히겠지?
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
%>
///////////////////////////////////////////////////
http://www.jakartaproject.com/board-read.do?boardId=javascripttip&boardNo=114655531098400&command=READ&page=1&categoryId=-1
Ajax 한글 파라미터 보내기
XMLHttpRequest 는 전송시
<meta http-equiv="content-type" content="text/html; charset=euc-kr" />
위에 처럼 euc-kr 이 지정되어 있더라도 설정된 인코딩을 사용하지 않는다
따라서 한글일경우 자바스크립트에서 직접 인코딩해주어야 한다 (불편하다! -0-)
자바스크립트에서 escape함수와 encodeURIComponent 함수를 지원해 주는데 escape은 유니코드로,
encodeURIComponent는 utf-8로 인코딩 된다
고로 보내기전 인코딩하고 받는 쪽에서도 인코딩 하면 한글문제는 일어나지 않는다
보내는쪽
utf-8 'list.jsp?search='+encodeURIComponent('홍길동')
받는쪽
request.setCharacterEncoding("utf-8");
request.getParameter("search");
Ajax에서 전송시 GET, POST 방식 모두 동일하게 처리해 주면 된다
- 2009/10/05 11:37
- ssongka.egloos.com/2450699
- 덧글수 : 0
1. IN
SELECT empno,ename,sal,deptno
FROM emp
WHERE sal IN (SELECT MAX(sal)
FROM emp
GROUP BY deptno
);
2. ANY : 서브쿼리의 결과값중 어느 하나의 값이라도 만족이 되면 결과값을 반환
서브 쿼리의 결과값중 가장 작은 값보다 큰값들을 모두 가져옴.
select *
from emp
where SAL > ANY(select SAL from emp where job = 'SALESMAN')
3. ALL : 서브쿼리의 결과값중 모든 결과 값이 만족 되야만 결과값을 반환
서브 쿼리의 결과값중 가장 큰 값보다 더 큰값들을 모두 가져옴
select *
from emp
where SAL > ALL(select SAL from emp where job = 'SALESMAN')
4. EXISTS : 서브쿼리의 데이터가 존재하는가의 여부를 먼저 따져 존재하는
값들만을 결과로 반환
select *
from emp
where EXISTS(select SAL from emp where job = 'SALESMAN')
-> 결과는 서브쿼리가 존재하므로 EMP 테이블의 모든값을 가져옴
select *
from emp
where EXISTS(select SAL from emp where job = 'S')
-> 결과는 서브쿼리가 존재하지 않으므로 EMP 테이블의 값을 모두 가져오지 못함.
그리고 이함수는 우리가 흔하게 쓰는 테이블의 ROW가 존재하는지 여부를
체크할때 COUNT 대신 쓰는게 바람직하다. count와는 달리 부분 처리함수이다.
select dname
from dept a
where exists( select empno from emp where deptno=a.deptno)
select dname
from dept a
,
( select deptno,count(*) cnt from emp group by deptno) b
where a.deptno = b.deptno and b.cnt > 0
위의 쿼리문을 쓰는것이 더 바람직하다. [출처] 다중행 서브쿼리 - IN, ANY, ALL, EXISTS|작성자 이마











최근 덧글