http://code.google.com/apis/maps/index.html
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Google/Service/GoogleMapAPI
2008년 1월 31일 목요일
SCRIPT - GOOGLE MAP API
MESSENGER PROXY
회사에서 메신저를 막았다면 당황하지 말고 tor 에 가서 프록시 프로그램을 다운로드 받은 후
메신저 설정에서 연결>프록시사용체크>SOCKS4>127.0.0.1>9050로 설정한 후
로그인 하면 된다.
혹시 잘 안될 경우 tor설정의 advanced에 들어가서 포트를 확인해보자.
2008년 1월 30일 수요일
SCRIPT - AJAX : REQUEST SET EUC-KR
어디서나 골치아픈 한글 문제... XHR을 쓸때도 마찬가지다.
한글로된 인자값을 보내야 할때 처리 방법은 아래와 같다.
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=euc-kr");
prototype.js 에선 이렇게 된다.
var myAjax = new Ajax.Request( url,
{ method: 'post',
parameters: {groupCode:group, code:code, placeCd:placdCd},
onComplete: reportSuccess,
onFailure: reportError,
encoding: 'euc-kr',
contentType: 'application/x-www-form-urlencoded'
});
2008년 1월 27일 일요일
ORACLE - ABOUT PROCEDURES
프로시저 리스트만
select * from user_procedures;
프로시저의 내용까지
select * from user_source;
select object_name,status,TO_CHAR(CREATED,'YYYY-MM-DD HH24:mi:ss') as
CREATED,TO_CHAR(LAST_DDL_TIME,'YYYY-MM-DD HH24:mi:ss') as LAST_DDL_TIMEfrom
user_objectswhere object_type = 'PROCEDURE'
프로시저 삭제시
drop procedure
프로시저명프로시저 내용보기
select text from user_source where name = 프로시저, 함수 이름
2008년 1월 25일 금요일
SCRIPT - AJAX : PROTOTYPE WITH SAMPLE DYNAMIC CONTENTS (JSP)
level 1 --------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Dynamic Contents</title>
<script src="http://common.ticketlink.co.kr/ajax/prototype.js"></script>
<script type="text/javascript">
//var xmlHttp;
//function createXMLHttpRequest(){
//if ( window.ActiveXObject) {
//xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
// }
//else if (window.XMLHttpRequest){
//xmlHttp = new XMLHttpRequest();
// }
//}
//function doSearch(){
//createXMLHttpRequest();
//xmlHttp.onreadystatechange = handleStateChange;
//xmlHttp.open("GET","test.xml", true);
//xmlHttp.send(null);
//}
//function handleStateChange(){
//if(xmlHttp.readyState == 4){
//if(xmlHttp.status == 200){
//clearPreviouseResults();
//parseResults();
//}
//}
//}
//Use prototype Ajax.Request
function doSearch()
{
var url = 'test.xml';
var myAjax = new Ajax.Request(
url,
{
method: 'get',
parameters: 'null',
onComplete: parseResults,
onFailure: reportError
});
}
//alert error message when Request error
function reportError(request)
{
alert('Sorry. There was an error.');
}
function clearPreviouseResults(){
//document.getElementById() : change $()
var header = $("header");
if (header.hasChildNodes()){
header.removeChild(header.childNodes[0]);
}
//document.getElementById() : change $()
var tableBody = $("resultsBody");
while (tableBody.childNodes.length > 0 ) {
tableBody.removeChild(tableBody.childNodes[0]);
}
}
function parseResults(response){
clearPreviouseResults();
//var results = xmlHttp.responseXML;
var results = response.responseXML;
var property = null;
var address = "";
var price = 0;
var comments = "";
var properties = results.getElementsByTagName("property");
for (var i = 0; i <properties.length; i++){
property = properties[i];
address = property.getElementsByTagName("address")[0].firstChild.nodeValue;
price = property.getElementsByTagName("price")[0].firstChild.nodeValue;
comments = property.getElementsByTagName("comments")[0].firstChild.nodeValue;
//if (price >= parseInt(document.frm.startPrice.value) ){ : change $F()
if (price >= parseInt ($F('startPrice')) ){
addTableRow(address, price, comments);
}
}
var header = document.createElement("h2");
var headerText = document.createTextNode("Results");
header.appendChild(headerText);
document.getElementById("header").appendChild(header);
document.getElementById("resultsTable").setAttribute("border", "1");
}
function addTableRow(address, price, comments) {
var row = document.createElement("tr");
var cell = createCellWithText(address);
row.appendChild(cell);
cell = createCellWithText(price);
row.appendChild(cell);
cell = createCellWithText(comments);
row.appendChild(cell);
//document.getElementById("resultsBody").appendChild(row); : change $()
$("resultsBody").appendChild(row);
}
function createCellWithText(text) {
var cell = document.createElement("td");
var textNode = document.createTextNode(text);
cell.appendChild(textNode);
return cell;
}
</script>
</head>
<body>
<h1> Search Real Estate Listing</h1>
<form name="frm">
Show listings from
<select name="startPrice" size="5">
<option value="50000">50,000</option>
<option value="100000">100,000</option>
<option value="150000">150,000</option>
</select>
to
<select name="endPrice" size="5">
<option value='100000'>100,000</option>
<option value='150000'>150,000</option>
<option value='200000'>200,000</option>
</select>
<input type="button" value="Search" onClick="doSearch()" />
</form>
<span id ="header"></span>
<table id="resultsTable" width="75%" border="0">
<tbody id="resultsBody"></tbody>
</table>
</body>
</html>
2008년 1월 23일 수요일
2008년 1월 21일 월요일
ECLIPSE - INCODING ERROR WHEN SAVE
EUC-KR 로 인코딩한 파일일 경우 허용하지 않는 문자가 포함 되어 있을때 저장이 되지 않는 경우가 있다. 이럴때는 VI로 저장 한 후에 다시 열어 보면 깨져 있는 파일을 쉽게 찾아 낼 수 있다.
2008년 1월 20일 일요일
SCRIPT - AJAX : SAMPLE DYNAMIC CONTENTS (XML)
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<property>
<address>구리</address>
<price>100000</price>
<comments>412341</comments>
</property>
<property>
<address>강남</address>
<price>200000</price>
<comments>1231</comments>
</property>
<property>
<address>강서</address>
<price>150000</price>
<comments>343</comments>
</property>
<property>
<address>강동</address>
<price>50000</price>
<comments>343</comments>
</property>
</properties>
SCRIPT - AJAX : SAMPLE DYNAMIC CONTENTS (JSP)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Dynamic Contents</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest(){
if ( window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
}
function doSearch(){
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET","dynamicContents.xml", true);
xmlHttp.send(null);
}
function handleStateChange(){
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
clearPreviouseResults();
parseResults();
}
}
}
function clearPreviouseResults(){
var header = document.getElementById("header");
if (header.hasChildNodes()){
header.removeChild(header.childNodes[0]);
}
var tableBody = document.getElementById("resultsBody");
while (tableBody.childNodes.length > 0 ) {
tableBody.removeChild(tableBody.childNodes[0]);
}
}
function parseResults(){
var results = xmlHttp.responseXML;
var property = null;
var address = "";
var price = 0;
var comments = "";
var properties = results.getElementsByTagName("property");
for (var i = 0; i <properties.length; i++){
property = properties[i];
address = property.getElementsByTagName("address")[0].firstChild.nodeValue;
price = property.getElementsByTagName("price")[0].firstChild.nodeValue;
comments = property.getElementsByTagName("comments")[0].firstChild.nodeValue;
if (price >= parseInt(document.frm.startPrice.value) ){ //int type
addTableRow(address, price, comments);
}
}
var header = document.createElement("h2");
var headerText = document.createTextNode("Results");
header.appendChild(headerText);
document.getElementById("header").appendChild(header);
document.getElementById("resultsTable").setAttribute("border", "1");
}
function addTableRow(address, price, comments) {
var row = document.createElement("tr");
var cell = createCellWithText(address);
row.appendChild(cell);
cell = createCellWithText(price);
row.appendChild(cell);
cell = createCellWithText(comments);
row.appendChild(cell);
document.getElementById("resultsBody").appendChild(row);
}
function createCellWithText(text) {
var cell = document.createElement("td");
var textNode = document.createTextNode(text);
cell.appendChild(textNode);
return cell;
}
</script>
</head>
<body>
<h1> Search Real Estate Listing</h1>
<form name="frm">
Show listings from
<select name="startPrice">
<option value="50000">50,000</option>
<option value="100000">100,000</option>
<option value="150000">150,000</option>
</select>
to
<select>
<option value='100000'>100,000</option>
<option value='150000'>150,000</option>
<option value='200000'>200,000</option>
</select>
<input type="button" value="Search" onClick="doSearch();" />
</form>
<span id ="header"></span>
<table id="resultsTable" width="75%" border="0">
<tbody id="resultsBody"></tbody>
</table>
</body>
</html>
2008년 1월 12일 토요일
ECLIPSE - PROPERTIES EDITOR
java의 properties는 iso-8859-1만 지원 하기 때문에 한글을 쓸려면 %JAVA_HOME%\bin\native2ascii.exe 같은 프로그램을 이용해서 변환하여 사용했었다. (매우 번거로운 작업이다.)
게다가 요사이 다국어 지원을 위해 properties를 많이 이용하는데(프레임웍 등에서) 한글과 같은 문자는 properties에 직접 입력을 할 수 없다는 것은 웬지 모순된 느낌이다.
각설하고 이런 불편함을 덜어 주게 하는 것이 이 'Properties Edit Plugin' 이다.
eclipse update URL: http://propedit.sourceforge.jp/eclipse/updates/
2008년 1월 9일 수요일
JAVA SCRIPT(AJAX) - DINAMIC TIME DISPLAY
보여줄 부분
<form name="counter">
<div id="displayTime"></div>
</form>
스크립트
<SCRIPT type="text/javascript">
var xmlHttp;
function createXMLHttpRequest() {
if(window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
if(!xmlHttp)
alert("fail connect");
return;
}
function startRequest() {
createXMLHttpRequest();
xmlHttp.open ("GET", "http://stillrabbit/systime.jsp", true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.send(null);
}
function handleStateChange() {
if (xmlHttp.readyState == 4)
if (xmlHttp.status == 200){
reverse_counter(xmlHttp.responseText);
}
else if (xmlHttp.status == 404)
alert("Request URL does not exist");
else
alert("Error: status code is " + xmlHttp.status);
}
function reverse_counter(systime){
today = toTimeObject(systime.substring(6,20));
d_day = new Date(<%= 지정된 날짜 %>);
//ex (2008,11,11,00,00)
days = (d_day - today) / 1000 / 60 / 60 / 24;
daysRound = Math.floor(days);
hours = (d_day - today) / 1000 / 60 / 60 - (24 * daysRound);
hoursRound = Math.floor(hours);
minutes = (d_day - today) / 1000 /60 - (24 * 60 * daysRound) - (60 * hoursRound);
minutesRound = Math.floor(minutes);
seconds = (d_day - today) / 1000 - (24 * 60 * 60 * daysRound) - (60 * 60 * hoursRound) -
(60 * minutesRound);
secondsRound = Math.round(seconds);
sec = " 초"
min = " 분 "
hr = " 시간 "
dy = " 일 "
//다이나믹 텍스트 출력 부분
//document.counter.recom_top_table02_data02_05.value = daysRound +
//dy + hoursRound + hr + minutesRound + min + secondsRound + sec;
//폼에 출력부분
if(eval(daysRound) < 0){
document.all["displayTime"].innerHTML = "경매종료";
}else{
document.all["displayTime"].innerHTML = daysRound + dy + hoursRound + hr + minutesRound + min + secondsRound + sec;
}
// newtime =
}
function set_timer(){
startRequest();
newtime=window.setTimeout("set_timer();", 1000);
}
/////////////////////////////////////////////////////
function toTimeObject(time) { //parseTime(time)
/////////////////////////////////////////////////////
// Time 스트링을 자바스크립트 Date 객체로 변환 parameter time: Time 형식의 String
var year = time.substr(0,4);
var month = time.substr(4,2) - 1; // 1월=0,12월=11
var day = time.substr(6,2);
var hour = time.substr(8,2);
var min = time.substr(10,2);
var ss = time.substr(12,2);
return new Date(year,month,day,hour,min,ss);
}
시간을 반환하는 sysTime.jsp
<%@page contentType="text/html;charset=euc-kr" session="true" %>
<%@page import="java.text.SimpleDateFormat,java.util.*"%>
<%
java.util.Date toDate = null;
String nowDate = "";
Calendar cal = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat( "yyyyMMddHHmmss" );
String curDate = formatter.format(cal.getTime());
toDate = formatter.parse( curDate );
//nowDate = curDate.substring(0,4)+","+(Integer.parseInt(curDate.substring(4,6))-1)+","+curDate.substring(6,8)+","+curDate.substring(8,10)+","+curDate.substring(10,12)+","+curDate.substring(12,14);
//nowDate = curDate.substring(0,4)+","+(Integer.parseInt(curDate.substring(4,6))-1)+","+curDate.substring(6,8)+","+curDate.substring(8,10)+","+curDate.substring(10,12)+curDate.substring(12,14);
%>
<%=curDate%>
2008년 1월 7일 월요일
ORACLE - Multiple distinct combinations
Let's assume we have a table T with the following columns:
dc1 dc2 fc1 fc2 lc2
1 1 11 12 21
1 1 11 12 22
1 1 11 12 23
2 2 22 22 31
3 3 33 35 32
3 3 33 37 32
I want a SQL query that returns all the rows that satsfy the following criteria: dc1, dc2 has multiple distinct fc1, lc2 combinations (count > 1). For the above sample data, the SQL would return:
dc1 dc2 fc1 fc2 lc2
1 1 11 12 21
1 1 11 12 22
1 1 11 12 23
-------------------------------------------------------------------------------------------
The solution is straightforward and utilizes COUNT DISTINCT:
select T.*
from T
inner join (
select dc1
, dc2
from T
group
by dc1
, dc2
having count( distinct fc1,lc2 ) > 1
)
as multiples
on T.dc1 = multiples.dc1
and T.dc2 = multiples.dc2
Unfortunately, not every database system supports COUNT DISTINCT.
For those that don't, you can obtain the correct results, perhaps not as efficiently, with concatenation or some other expression to combine the two column values. For example, using Microsoft SQL Server syntax --
select T.*
from T
inner
join (
select dc1
, dc2
from T
group
by dc1
, dc2
having count( distinct
cast(fc1 as
varchar)
+cast(lc2 as varchar) ) > 1
) as multiples
on T.dc1 = multiples.dc1
and T.dc2 = multiples.dc2
2008년 1월 6일 일요일
ORACLE - START WITH ~ CONNECT BY PRIOR
◈ START WITH
- 계층 질의의 루트(부모행)로 사용될 행을 지정 합니다..
- 서브쿼리를 사용할 수도 있습니다.
◈ CONNECT BY
- 이 절을 이용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정 합니다.
- 보통 PRIOR 연산자를 많이 사용 합니다..
- 서브쿼리를 사용할 수 없습니다..
- PRIOR
PRIOR 이 붙는 column 이 가져온 row 의 column을 의미한다. 즉 상위에 존재할 데이타가 되
게 된다. 어느쪽에 붙느냐 잘 따져 본다.
◈ CONNECT BY의 실행순서는 다음과 같습니다.
- 첫째 START WITH절
- 둘째 CONNECT BY 절
- 세째 WHERE 절 순서로 풀리게 되어있습니다.
◈ SYNTEX
SELECT
FROM
START WITH
CONNECT BY PRIOR
AND
ORDER SIBLINGS BY
or
SELECT
FROM
WHERE
START WITH
CONNECT BY PRIOR
ORDER SIBLINGS BY
◈ 이용
1) 쇼핑목 카테고리 관계 - 대분류, 중분류, 소분류 등을 트리 구조로
2) 게시판 에서 일반글 과 답글과의 관계 등을 트리 구조로
◈ 데이터가 많아질 경우....
- 첫째로 풀리는 START WITH job='PRESIDENT' job 컬럼에 index가 생성되어 있지 않는다면
속도를 보장할 수 없습니다.
- 그리고 둘째로 풀리는 CONNECT BY PRIOR empno = mgr 역시 PRIOR 쪽의 컬럼값이 상수가
되기 때문에 MGR컬럼에 index를 생성하여야 CONNECT BY의 속도를 보장할 수 있습니다.
- 계층구조를 CONNECT BY, START WITH로 풀면 부분범위 처리가 불가능하고 Desc으로
표현하기가 어렵 습니다.
--------------- 설명
-- 아래 예제 1
1) job 이 president 인 row 을 가져온다.
2) 가져온 row 에서 prior 이 붙은 comumn 의 데이타를 가져온다. 여긴선 empno 다.
3) PRIOR empno = mgr empno 을 mgr 로 사용하는 row 을 가져온다. 기존의 row 상위, 비교해서 가져온 row 하위에 있게 된다.
4) 이제 두번째로 가져온 row 에서 PRIOR empno = mgr 을 실행시킨다.
5) 이런 과정이 연속으로 반복되면서 최종적으로 가져온 data 는 트리 구조를 이루게 된다.(계층구조)
6) LEVEL 은 depth 을 의미한다.
7) empno = PRIOR mgr 한다면 가져온 row 의 mgr을 기준으로 비교하여 data을 가져오게 된다.
예제 2 참조
---- 예제 1
SELECT LEVEL,empno,ename, mgr, job -- LEVEL 은 depth 을 의미한다.
FROM emp
START WITH job = 'PRESIDENT' -- 직업이 PRESIDENT를 기준으로
CONNECT BY PRIOR empno = mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층
-- level 을 공백으로 찍어 본다.
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename,LEVEL, empno, mgr, job
FROM emp
START WITH job = 'PRESIDENT' -- 직업이 PRESIDENT를 기준으로
CONNECT BY PRIOR empno = mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층
-- 결과치
ENAME LEVEL EMPNO MGR JOB
KING 1 7839 PRESIDENT
JONES 2 7566 7839 MANAGER
SCOTT 3 7788 7566 ANALYST
ADAMS 4 7876 7788 CLERK
FORD 3 7902 7566 ANALYST
SMITH 4 7369 7902 CLERK
JJS 3 9000 7566 ANALIST
BLAKE 2 7698 7839 MANAGER
ALLEN 3 7499 7698 SALESMAN
WARD 3 7521 7698 SALESMAN
MARTIN 3 7654 7698 SALESMAN
TURNER 3 7844 7698 SALESMAN
JAMES 3 7900 7698 CLERK
CLARK 2 7782 7839 MANAGER
MILLER 3 7934 7782 CLERK
----예제 2 - PRIOR 위치 변경
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename,LEVEL, empno, mgr, job -- level 을 공백으로 찍어 본다.
FROM emp
START WITH job = 'CLERK' -- 직업이 CLERK를 기준으로
CONNECT BY empno = PRIOR mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층
-- 결과치
ENAME LEVEL EMPNO MGR JOB
SMITH 1 7369 7902 CLERK
FORD 2 7902 7566 ANALYST
JONES 3 7566 7839 MANAGER
KING 4 7839 PRESIDENT
ADAMS 1 7876 7788 CLERK
SCOTT 2 7788 7566 ANALYST
JONES 3 7566 7839 MANAGER
KING 4 7839 PRESIDENT
JAMES 1 7900 7698 CLERK
BLAKE 2 7698 7839 MANAGER
KING 3 7839 PRESIDENT
MILLER 1 7934 7782 CLERK
CLARK 2 7782 7839 MANAGER
KING 3 7839 PRESIDENT
---- 예제 3: 조건 절 사용
-- 1) WHERE 절 사용
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename,LEVEL, empno, mgr, job -- level 을 공백으로 찍어 본다.
FROM emp
WHERE ename LIKE '%K%'
START WITH job = 'PRESIDENT' -- 직업이 PRESIDENT를 기준으로
CONNECT BY PRIOR empno = mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층
-- 2) CONNECT BY PRIOR 아래에 AND 사용
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename,LEVEL, empno, mgr, job -- level 을 공백으로 찍어 본다.
FROM emp
START WITH job = 'PRESIDENT' -- 직업이 PRESIDENT를 기준으로
CONNECT BY PRIOR empno = mgr -- 사원(empno)과 관리자(mgr)의 관계를 계층
AND ename LIKE '%K%'
-- 3) LEVEL 조건 사용
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno, mgr, job
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno =mgr
AND LEVEL <= 2
---- 예제4 : 각 label별로 급여의 합과 인원수를 구하는 예제
SELECT LEVEL, SUM(sal) salTotal,COUNT(empno) empnCnt
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno=mgr
GROUP BY LEVEL
ORDER BY LEVEL
-- 결과치
LEVEL salTotal empnCnt
---------- ---------- ----------
1 5000 1
2 8275 3
3 13850 8
4 1900 2
ORACLE - FUNCTION TIP
[문자열]
1 . CONCAT( column1expression1 ,column2expression2 )
CONCAT('Good','String') --> GoodString : 와 같은 역할을 한다.
2 . SUBSTR(columnexpression, m [,n]) : m값이 음수면 문자값의 끝부터 (글자기준 )
SUBSTR('String',1,3) --> Str : 1번째부터 3개의 문자를 리턴한다.
3. SUBSTRB(columnexpression, m [,n]) : m값이 음수면 문자값의 끝부터 (바이트기준 )
SUBSTRB('String',1,3) --> Str : 1번째부터 3개의 문자를 리턴한다
4. INITCAP( columnexpression )
INITCAP('string') --> String : 첫글자만 대문자, 나머지글자는 소문자로 변환
5. UPPER( columnexpression )
UPPER('String') --> STRING : 대문자로 변환
6. LOWER( columnexpression )
LOWER('String') --> string : 소문자로 변환
7. LPAD( columnexpression,n,'string' ) : n 은 전체 길이와 채울문자(숫자가능)
LPAD('String',10,'*') --> ****String
8. RPAD('String',10,'*') --> String****
9. LENGTH( columnexpression )
LENGTH('String') --> 6 : 문자열의 길이를 리턴한다.
10. REPLACE(column 0 , 'r') L01102 => Lr11r2
11. INSTR( columnexpression )
INSTR('String','r') --> 3 : 문자열에 'r'이 몇번째 위치인지를 (숫자)리턴
12. LTRIM(' String') --> 'String' : 문자열의 왼쪽 공백을 버린다.
13. RTRIM('String ') --> 'String' : 문자령의 오른쪽 공백을 버린다.
* TRIM(leading/tailing/both, trim_character FROM trim_source )
TRIM( 'S' FROM 'SSMITH') --> MITH
[ 숫자 ]
1. ROUND(45.926, 2) --> 45.93 : 소수점 두자리수까지 보여주면서 반올림한다.
SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL
==> 45.92 46 50
2. TRUNC(45.926, 2) --> 45.92 : 소수점 두자리까지만 보여주고 나머지는 버린다.
SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-1) FROM DUAL
==> 45.92 45(n이 생략된면 일의 자리까지 남기고 버린다.) 40
3. MOD(1600,300) --> 100 : 1600을 300으로 나누고 나머지를 리턴한다.
[ Date ]
* SYSTEM 날짜를 갖고 오는 방법.
SELECT sysdate FROM dual
date + number : date에 number만큼 후의 날자를 보여준다.
date - number : date에 number만큼 전의 날자를 보여준다.
date1 - date2 : date1에서 date2 까지의 총 일수를 보여준다.( date1+date2는 X )
date1 + 숫자/24 : date1에서 시간을 더해 날짜를 보여준다.
MONTHS_BETWEEN('01-SEP-95','11-JAN-94') --> 19.6774194
; 두날짜 사이의 달수를 보여준다.
ADD_MONTHS('11-JAN-94', 6) --> 11-JUL-94
; 날짜에 6개월을 더한 날자를 보여준다.
NEXT_DAY('01-SEP-95','FRIDAY') --> '08-SEP-95'
; 해당일 다음에 오는 FRIDAY의 일자를 보여준다.
('SUNDAY'는 1, 'MONDAY'는 2...이런식으로 숫자를 써줘도 된다.)
LAST_DAY('01-SEP-95') --> '30-SEP-95'
; 해당월의 마지막날자를 보여준다.
ROUND('25-JUL-95','MONTH')--> 01-AUG-95
ROUND('25-JUL-95','YEAR')--> 01-JAN-96
TRUNC('25-JUL-95','MONTH') --> 01-JUL-95
TRUNC('25-JUL-95','YEAR') --> 01-JAN-95
[ Conversion Functions ]
nlsparams : 십진수, 그룹구분자, 지역 통화 기호, 국제 통화 기호
TO_CHAR(date,['format'],[nlsparams]) : date를 format에 맞게 문자열로 변환한다.
- Date Format Elements
YYYY --> 1999 (년출력) , YEAR --> nineteen ninety-nine (년출력)
MM --> 12 (월출력) , MONTH --> DECEMBER (월출력), MON --> DEC
D --> 요일을 숫자로 리턴한다.(일요일은 1, 월요일은 2...)
DD --> 07 (달의 일출력)
DDD --> 200 (연의 일출력)그 해의 총 몇 일째인가를 리턴한다.
DAY --> MONDAY (요일출력) DY-->MON
CC --> 20 (몇 세기인지를 보여준다.)
WW --> 그 해의 몇 번째 주인가를 리턴한다.
W --> 그 달의 몇 번째 주인가를 리턴한다.
HH or HH12 or HH24 / MI(0-59분) / SS(0-59초)
* 문자열은 " " 묶어 추가한다 DD " of " MONTH --> 12 of DECEMBER
* 숫자 접미어는 숫자를 문자로 표기. TH(4->4TH)/ SP(4->FOUR)/ SPTH or THSP(4->FOURTH)
TO_CHAR(number,'format',[nlsparams]) : number를 format에 맞게 문자열로 변환한다.
- Number Format Elements
9 : 999,999 --> 1,234 $: 부동 달러 기호 $99999 -> $1234
0 : 099999 --> 001234 99.999EEEE -> 1.234E+03 B: 0값을 공백으로
L : L99,999 --> FF1,234 (NLS_CURRENCY에 설정되어있는 값이 L로 보여진다.)
TO_NUMBER(char,['format'],[nlsparams]) : 숫자형태의 문자열을 숫자로 변한한다.
TO_DATE(char,['format'],[nlsparams]):날자형태의 문자열을 format에 맞게 날자형식으로 변환 한다.
[ NVL Funcion ]
: 값이 null일 때 설정값을 보여준다.
NVL(number_column, 0) : null일 때 0을 보여준다.
NVL(date_column, '01-JAN-95') : null일 때 '01-JAN-95'를 보여준다.
NVL(character_column, 'Empty') : null일 때 'Empty'를 보여준다.
* column Type과 표현식의 type이 반드시 일치해야 한다.
[ DECODE Function ]
: CASE or IF-THEN-ELSE 형식과 비슷하다.
DECODE(col/expression, search1, result1 [,search2,result2,…] [,default])
2008년 1월 5일 토요일
ECLIPSE - RESIN IN ECLIPSE 3.X
1. INSTALL RESIN PLUG IN
Help -> Software Updates -> Find Install 에서 [New Remote Site]를 선택한 후
Name : Improve's Eclipse plugin site
URL : http://www.improve-technologies.com/alpha/updates/site.xml를 입력한 후 plug-in을 설치합니다.(디폴트로 설치하면 되기때문에 자세한 설치과정은 생략합니다.)
2. CONFIG
Windows -> Preferences -> Resin 를 선택하여 설치한 resin version 과 home directory를 선택하고 java compiler의 위치를 선택합니다.
그리고 resin.conf를 프로젝트에 맞게 . 각 버젼에 맞는 설정은 resin site 참고.
4. LUNCHER CONFIG
Run -> Run을 띄웁니다.[Main] tab에서 Name과 Project 명을 선택하고 resin conf파일 위치를 선택합니다.
[Classpath]에 {JAVA_HOME}/lib/tools.jar를
debug를 선택하면 debug 모드로 작동한다. (jsp는 작동 안할 수도 있다.)
2008년 1월 2일 수요일
ORACLE - ABOUT ROWNUM & TIP(PAGING)
from 5 (select id, data 6 from t 7 order by id, rowid) a 8 where rownum <= 150 9 ) 10 where rnum >= 148; ID DATA RNUM ------- ---------- ----------- 0 45 1480 99 1490 41 150
SQL>SQL> select * 2 from 3 (select a.*, rownum rnum 4 from 5 (select id, data 6 from t 7 order by id, rowid) a 8 where rownum <= 151 9 ) 10 where rnum >= 148; ID DATA RNUM ------- ---------- ----------- 0 45 1480 99 1490 41 1500 45 151 |