sql은 너무 어렵습니다. 이번에는 LPAD에 대해서 알아봅시다.
아래 내용 출처입니다.
http://winslab.cnu.ac.kr/Oracle%20API/server.101/b10759/functions072.htm
Purpose
LPAD returns expr1, left-padded to length n characters with the sequence of characters in expr2. This function is useful for formatting the output of a query.
Both expr1 and expr2 can be any of the datatypes CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB. The string returned is of VARCHAR2 datatype and is in the same character set as expr1. The argument n must be a NUMBER integer or a value that can be implicitly converted to a NUMBER integer.
If you do not specify expr2, then the default is a single blank. If expr1 is longer than n, then this function returns the portion of expr1 that fits in n.
The argument n is the total length of the return value as it is displayed on your terminal screen. In most character sets, this is also the number of characters in the return value. However, in some multibyte character sets, the display length of a character string can differ from the number of characters in the string.
뭐 도움이 될만한 설명이 없노.. 흠흠;;
Examples
The following example left-pads a string with the asterisk (*) and period (.) characters:
SELECT LPAD('Page 1',15,'*.') "LPAD example" FROM DUAL;
LPAD example
---------------
*.*.*.*.*Page 1
위 설명에 의하면 LPAD('Page 1',15,'*.')는 총 15개의 char를 return값으로 돌려주는데,
문자열이 15자가 될때까지 Page 1의 왼쪽에는 '*.' 로 채워라... 이런 뜻?? 함수가 좀 불편하게 되어 있는듯..
그럼 내가 해결하려고 하는 이것은 무슨 뜻인고 하니... 또 검색을 해봐야겠다.
링크에 자세히 설명이 되어 있음. http://joahani.egloos.com/3564458
LPAD(' ', 4*(LEVEL-1)) || base2.servicename servicename,
START WITH
base2.serviceDepth = 1
CONNECT BY PRIOR
base2.ServiceCode = base2.OwnerCode
ORDER SIBLINGS BY
base2.jobcode,
base2.ServiceCode
뭐 전체 query를 올릴 수 없는 관계로.. 설명이 필요한 부분만 정리 해보겠습니다.
참고로 저는 select만 할 줄 아는 관계로... 제가 이해한데로만 이야기 하겠습니다.
혹시 잘못된 부분이 있으시면 바로 이야기 부탁드리겠습니다.
첫번째 줄 부터 설명을...
LPAD에 대한 설명은 위에서 했으므로 생략하겠습니다.
LEVEL이라는 것이 있는데, 저런 필드는 없더군요. 이건 나중에 설명하다보면은 뭔가 감이 잡힐듯... 일단 계속 설명을 하자면, LEVEL이 1이면 괄호 안의 값이 0이 되므로 servicename의 왼쪽에 빈칸이 올리가 없겠죠? LEVEL이 2이면 괄호 안의 값이 1이 되므로, 4*1은 4가 되므로 총 문자열은 4칸인데, 4칸 모두 ' '으로 채우고 그 후에 servicename을 채웁니다.
base2.serviceDepth = 1
START WITH문을 설명 하자면, START WITH문에서는 base2.serviceDepth = 1 이라고 하였는데 Tree를 만드는 기준 점을 serviceDepth로 지정로 지정하였습니다. 즉 Root는 base2.serviceDepth가 1인 것 부터 root가 됩니다.
base2.ServiceCode = base2.OwnerCode
CONNECT BY 절을 또 설명하자면, 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정합니다. 두 관계를 주로 PRIOR을 이용해서 설정을 합니다.
CONNECT BY PRIOR base2.ServiceCode = base2.OwnerCode
CONNECT BY base2.ServiceCode = PRIOR base2.OwnerCode
위 2개의 쿼리는 결과가 틀려집니다.
아래 내용을 보시면 더 이해가 빠르실듯...
1. CONNECT BY PRIOR 자식컬럼 = 부모컬럼 ==> 부모에서 자식으로 트리 구성 2. CONNECT BY 자식컬럼 = PRIOR 부모컬럼 ==> 자식에서 부모으로 트리 구성
base2.jobcode,
base2.ServiceCode
마지막으로 ORDER SIBLINGS BY입니다. 이건 뭐 ORDER BY랑 비슷한듯, 검색한 순서데로 보고 싶을 때 사용한다는 군요. ORCALE 9i 이후 버전에서만 사용가능하다고 합니다.
흠... 이것 저것 검색을 해보면서 정리는 했지만, 솔직히 저도 이해하기가 쉽지 않네요.
대학교 DB수업 때는 SELECT, INSERT, UPDATE 써본게 전부고, 모든 data를 하나의 테이블에 넣고 사용했던 터라....
역시 대학교 때 공부 안한건 티가 나더라고요... MFC와 DB는 아주 미치겠습니다. ㅎㅎ
쓸데 없는 어셈블리어나 공부하고 ㅠㅜ MFC나 공부할 걸 ㅠㅜ
'Voice Portal > Database' 카테고리의 다른 글
| [tomcat] DBCP 설정하기 (0) | 2009/11/17 |
|---|---|
| [sql] SQL 설명이 잘 되어 있는 사이트 (0) | 2009/10/22 |
| [sql] LPAD 함수 (0) | 2009/06/22 |
| [sql] UPDATE 문 (0) | 2009/06/17 |
| [sql] 문자열 함수 (0) | 2009/06/16 |
| [sql] ALTER 예제 (2) | 2009/06/16 |


