하루동안 열지 않기 [쿠키]

개발/실전 2015. 4. 1. 19:55

    <p style="float:left"><input type="checkbox" name="checkbox" value="checkbox" id="checkPopClose">하루동안 보지않음</p>
    <a href="javascript:closeWin();" class="close" id="closePopup">닫기</a>

 

// JavaScript Document

$(function()

{
    checkCookie();
     $('#closePopup').click(function()

{
    //checkbox 체크여부 확인
    if($('#checkPopClose').is(':checked')) //check 박스에 체크를 했으면

{
    closeWin('1');
}

else

{
    $('#headbanner').slideUp(300);

}

});
})

function closeWin(obj)
{
    if (obj == "1" )   
    {
    setCookie2( "topBanner", "done" , 1);
    }

$('#headbanner').slideUp(300);

}

function setCookie2( name, value, expiredays )
{
var todayDate = new Date();
todayDate.setDate( todayDate.getDate() + expiredays );
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
}

function checkCookie()

{
//쿠키값이 있으면 element를 가려준다
if(getCookie2("topBanner") == "done")
document.getElementById("headbanner").style.display="none";
//쿠키값이 없으면 element를 보여준다
else
document.getElementById("headbanner").style.display="block";
}

function getCookie2( name )
{
var nameOfCookie = name + "=";
var x = 0;
while ( x <= document.cookie.length )
{
var y = (x+nameOfCookie.length);
if ( document.cookie.substring( x, y ) == nameOfCookie )
{
if ( (endOfCookie=document.cookie.indexOf( ";", y )) == -1 )
endOfCookie = document.cookie.length;
return unescape( document.cookie.substring( y, endOfCookie ) );
}
x = document.cookie.indexOf( " ", x ) + 1;
if ( x == 0 )
break;
}
return "";
}

'개발 > 실전' 카테고리의 다른 글

접속 기기가 PC , 모바일인지 구분하는 스크립트.  (0) 2015.11.24
도메인 자동 주소 변경  (0) 2015.08.11
checkbox 사용  (0) 2014.10.29
오라클 long 타입 insert  (0) 2014.08.28
getInstance() 란 무엇인가  (0) 2014.06.18

url로 파일 다운로드

개발/코딩 2015. 3. 12. 15:29

package com.space.rentalServer.batch;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

public class mobigoFileDown
{
 /**
 * 버퍼 사이즈
 */
 final static int size = 1024;
 
 /**
 * fileAddress에서 파일을 읽어, 다운로드 디렉토리에 다운로드
 *
 * @param fileAddress
 * @param localFileName
 * @param downloadDir
 */
 public static void fileUrlReadAndDownload(String fileAddress,String localFileName, String downloadDir)
 {
  OutputStream outStream = null;
  URLConnection uCon = null;
  
  InputStream is = null;
  try
  {
  
   System.out.println("-------Download Start------");
   
   URL Url;
   byte[] buf;
   int byteRead;
   int byteWritten = 0;
   Url = new URL("http://ext.mobigo.co.kr/freet.json.php");
   outStream = new BufferedOutputStream(new FileOutputStream(downloadDir + localFileName));
   
   uCon = Url.openConnection();
   is = uCon.getInputStream();
   buf = new byte[size];
   while ((byteRead = is.read(buf)) != -1)
   {
    outStream.write(buf, 0, byteRead);
    byteWritten += byteRead;
   }
   System.out.println("Download Successfully.");
   System.out.println("File name : " + localFileName);
   System.out.println("of bytes  : " + byteWritten);
   System.out.println("-------Download End--------");

  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  finally
  {
   try
   {
    is.close();
    outStream.close();
   }
   catch (IOException e)
   {
    e.printStackTrace();
   }
  }
 }

 /**
 *
 * @param fileAddress
 * @param downloadDir
 */
 public static void fileUrlDownload(String fileAddress, String downloadDir)
 {

  int slashIndex = fileAddress.lastIndexOf('/');
  int periodIndex = fileAddress.lastIndexOf('.');
  
  // 파일 어드레스에서 마지막에 있는 파일이름을 취득
  String fileName = fileAddress.substring(slashIndex + 1);
  
  if (periodIndex >= 1 && slashIndex >= 0 && slashIndex < fileAddress.length() - 1)
  {
   fileUrlReadAndDownload(fileAddress, fileName, downloadDir);
  }
  else
  {
   System.err.println("path or file name NG.");
  }
 }

 /**
 * main
 *
 * @param args
 */
 public static void main(String[] args)
 {
  // 파일 어드레스
  String url = "http://ext.mobigo.co.kr/freet.json";  //freet.json의 파일 이름으로 저장된다
  // 다운로드 디렉토리
  String downDir = "/data4/rcpro/mobigo/";
  
  // 다운로드 호출
  fileUrlDownload(url, downDir);
 }
}


 

'개발 > 코딩' 카테고리의 다른 글

JSP 드래그, 오른쪽 클릭 막기  (0) 2017.01.25
메뉴 클릭하면 이미지 변경  (0) 2016.03.21
JSON 파싱 사용하기  (0) 2015.03.12
session을 통해 값넘기기  (0) 2014.06.11
request.getParameter로 값 넘기기  (0) 2014.06.11

JSON 파싱 사용하기

개발/코딩 2015. 3. 12. 15:24

먼저 json-sample-1.2 jar를 다운 받아야한다.

 

<%@ page language="java" contentType="text/html; charset=euc-kr"  import="org.json.simple.*" %>
<%@ taglib uri="/spacenet/taglibs/dispData" prefix="dd" %>
<%@ page import="java.util.*, spacenet.func, spacenet.database.BlobQuery" %>
<%@ page import="java.io.PrintWriter"%>
<%@ page import="rental.*"%>
<%@ page import="java.util.*, spacenet.func, spacenet.ppplus.ppagencyuser.ppagencyUser" %>
<%

 WriteLog log = new WriteLog("/home/ppplus/logs/mobigo.log");

 String ppAgencyNo=func.NVL(request.getParameter("aid")); // http://partner.freet.co.kr/mobigo/mobigo.jsp?aid=
log.write(" === mobigo start ==="); 
log.write(" ppAgencyNo: ["+ppAgencyNo+"]"); 

 String ppAgencyName="";
 String operType="";
 int remain = 0;
 String resultCode = "99";
 
 ////////////////  해당 대리점 정상, 잔액 여부 쿼리 Start//////////////////////
 Hashtable param = new Hashtable();
 param.put("1" , "SELECT PP_AGENCY_NAME, REMAIN, OPER_TYPE FROM PP_AGENCY_INFO WHERE PP_AGENCY_NO = '"+ppAgencyNo+"' ");
%>
 <dd:data db="ppc" sql="REPLACE_QRY" params="<%=param%>" paramsReplace="true">
<%
 ppAgencyName = String.valueOf(data.get("1"));
 remain =Integer.parseInt(String.valueOf(data.get("2")));
 operType = String.valueOf(data.get("3"));
log.write(" ppAgencyName: ["+ppAgencyName+"]"); 
log.write(" remain: ["+remain+"]"); 
log.write(" operType: ["+operType+"]"); 
%>
</dd:data>
<%
 ////////////////  해당 대리점 정상, 잔액 여부 쿼리 End//////////////////////

 if(operType.equals("A"))
 {
  if(remain >= 1000)
   resultCode = "00";  // 대리점 영업이 정상일 경우 
  else
   resultCode = "99"; //정상이면서 잔액이 없는 경우 

 }
 else
  resultCode = "99"; //대리점 영업이 정상이 아닐 경우

log.write(" resultCode: ["+resultCode+"]"); 
 String callBack = request.getParameter("callBack");  // 서버로 부터 넘어온 데이터를 받아옴
log.write(" callBack: ["+callBack+"]"); 
log.write(" === mobigo end ==="); 
 JSONObject jObject = new JSONObject(); //하나의 정보를 저장할 JSONObject를 설정

 PrintWriter pw = response.getWriter();

 jObject.put("id", ppAgencyNo); //데이터를 삽입
 jObject.put("resultCode", resultCode); //데이터를 삽입 
 pw.print(callBack + "("+jObject.toString()+")");
// pw.print("("+jObject.toString()+")");
 pw.flush();
 pw.close();
%>

 

============================ json 파싱 ============================================

JSON형태로 저장된 파일을 읽어서 DB에 저장

******** json 파일 start *****************

{
 "date":"2015-03-03",
 "rowCount":2,
 "rows":
 [
  {
   "aid":"ID1",
   "aname":"\ub300\ub9ac\uc810\uba851",
   "acode":"\ub300\ub9ac\uc810\ucf54\ub4dc1",
   "dc":"7",
   "dp":"6300",
   "mc":"21"
  },
  {
   "aid":"ID2",
   "aname":"\ub300\ub9ac\uc810\uba852",
   "acode":"\ub300\ub9ac\uc810\ucf54\ub4dc2",
   "dc":"5",
   "dp":"4500",
   "mc":"15"
  },
  {
   "aid":"ID3",
   "aname":"\ub300\ub9ac\uc810\uba853",
   "acode":"\ub300\ub9ac\uc810\ucf54\ub4dc3",
   "dc":"7",
   "dp":"7500",
   "mc":"75"
  }
 ]
}

******** json 파일 end *****************

 

******** 파싱 및 DB저장 ****************

 

 

<%@ page language="java" contentType="text/html; charset=euc-kr"%>
<%@ page import="org.json.simple.*" %>
<%@ page import="java.io.*,rental.*"%>
<%@page import="org.json.simple.parser.*" %>
<%@ page import="java.util.*, spacenet.func, spacenet.database.BlobQuery" %>
<%!
 public String replaceString(String src, String oldStr, String newStr)
 {
  if (src == null)
   return null;

  StringBuffer dest = new StringBuffer("");
  int  oldLen = oldStr.length();
  int  srcLen = src.length();
  int  pos = 0;
  int  oldPos = 0;

  while ((pos = src.indexOf(oldStr, oldPos)) >= 0)
  {
   dest.append(src.substring(oldPos, pos));
   dest.append(newStr);
   oldPos = pos + oldLen;
  }

  if (oldPos < srcLen)
   dest.append(src.substring(oldPos));

  return dest.toString();
 }
%>
<%

  WriteLog log = new WriteLog("/home/ppplus/logs/mobigo.log");

  BlobQuery db = null;
  int qryno = 0, n = 0;

  JSONParser parser = new JSONParser();
  String acode="", aid="", aname="", dp="", mc="", dc="";

        try
        {
   Object obj = parser.parse(new FileReader("/data4/rcpro/mobigo/freet.json")); // myJson.json파일을 읽어와 Object로 파싱
 
   JSONObject jsonObject =(JSONObject) obj;

   JSONArray msgList =(JSONArray) jsonObject.get("rows");  // key 값으로 list가져오기
/*
   Iterator iterator = msgList.iterator(); 
         while(iterator.hasNext())  iterator 로 파일 읽기
   {
                out.println(iterator.next());
            }
*/
   String date = (String) jsonObject.get("date");  //날짜
   int rowCount = func.objToInt(jsonObject.get("rowCount")); //레코드 갯수
   
   date = replaceString((date),"-",""); // YYYY-MM-DD 형식에서 YYYYMMDD 형식으로

log.write(" date: ["+date+"]"); 
log.write(" rowCount: ["+rowCount+"]");

   try
   {
    db = new BlobQuery();
    //db에 접속하기
    if (!db.getConnect("ppc"))
    {
     out.println("<script>alert('db 접속오류가 발생하였습니다. 다시 시도해주세요.'); history.back(); </script>");
    }

    db.SQL = "INSERT INTO MOBIGO (PROCESS_DATE, ROW_COUNT, ID, PP_AGENCY_NO, PP_AGENCY_NAME, DAY_COUNT, DAY_FEE, VAT_DAY_FEE, MONTH_COUNT) "
       +"VALUES ( ? ,?, ?, ?, ?, ?, ?, ? ,? ) ";

    qryno = db.prepareStatement();

    for(int i=0; i < msgList.size(); i++)
    {
     JSONObject jsonobj=(JSONObject)msgList.get(i); //각각의 값을 개별로 가져오기 위해 JSON 배열 파싱후 각각의 key로 value 값 출력

     aid=(String) jsonobj.get("aid");  //ID
     aname=(String) jsonobj.get("aname"); //대리점명
     acode=(String) jsonobj.get("acode"); //대리점코드
     dc=(String) jsonobj.get("dc");  //일일누적건수
     dp=(String) jsonobj.get("dp");  //일일 누적 금액
     mc=(String) jsonobj.get("mc"); //월 누적건수
     double vatDp = Double.parseDouble(dp) * 1.1; //일일 누적금액에 부가세 포함

log.write(" aid: ["+aid+"]"); 
log.write(" aname: ["+aname+"]"); 
log.write(" acode: ["+acode+"]"); 
log.write(" dc: ["+dc+"]"); 
log.write(" dp: ["+dp+"]"); 
log.write(" mc: ["+mc+"]");
log.write(" vatDp: ["+vatDp+"]");
 
     db.Statements(qryno).setString(1, date);
     db.Statements(qryno).setInt(2, rowCount);
     db.Statements(qryno).setString(3, aid);
     db.Statements(qryno).setString(4, acode);
     db.Statements(qryno).setString(5, aname);
     db.Statements(qryno).setInt(6, Integer.parseInt(dc));
     db.Statements(qryno).setInt(7, Integer.parseInt(dp));
     db.Statements(qryno).setDouble(8, vatDp);
     db.Statements(qryno).setInt(9, Integer.parseInt(mc));

     n = db.executeUpdate(qryno);  
log.write(" RESULT: ["+n+"]"); 
    }

    db.Close(qryno);
    db.commit();  

   }
   catch(Exception e)
   {
log.write("error: " + e.getMessage());
    db.rollback();
   }
   finally
   {
    db.freeConnect();
   }
        } catch (Exception e)
        {
             e.printStackTrace();
log.write("error: " + e.getMessage());
        }

%>


 

'개발 > 코딩' 카테고리의 다른 글

메뉴 클릭하면 이미지 변경  (0) 2016.03.21
url로 파일 다운로드  (0) 2015.03.12
session을 통해 값넘기기  (0) 2014.06.11
request.getParameter로 값 넘기기  (0) 2014.06.11
request, response 객체  (0) 2014.04.03

테이블 정보 조회

개발/DB 2015. 1. 16. 10:23

테이블 내의 컬럼이 뭐가 들어있는지, 속성은 무엇인지 알고 싶을 때 사용하는 쿼리

 

SELECT

    TABLE_NAME,

    COLUMN_NAME,

    DATA_TYPE,

    DATA_LENGTH,

    DATA_PRECISION,

    DATA_SCALE,

    NULLABLE,

    COLUMN_ID,

    DATA_DEFAULT,

    CHAR_LENGTH

FROM

    USER_TAB_COLUMNS

WHERE

    TABLE_NAME = 'SA_MEMBER'

 

'개발 > DB' 카테고리의 다른 글

ORA-00054 에러  (0) 2015.11.25
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
오라클 UPDATE SELECT 문  (0) 2014.11.06
오라클 단일행 함수 정리  (0) 2014.11.05
오라클 PARTITION BY  (1) 2014.10.30

오라클 UPDATE SELECT 문

개발/DB 2014. 11. 6. 13:49

UPDATE문을 짜다가

 

UPDATE TABLE1 SET A = (SELECT D FROM TABLE2 WHERE G='AAA'),

B=(SELECT E FROM TABLE2 WHERE G='AAA')

WHERE H='111'

 

이런식으로 작성하다가 이건 너무 비효율적인 방법이라서 찾아봤는데

아래와 같은 방법이 있었다....

 

 

UPDATE TABLE1

SET( A, B, C) = (SELECT D, E, F FROM TABLE2 WHERE G= 'AAA')

WHERE H = '111'

 

매우 간단하죠~?ㅋㅋ

'개발 > DB' 카테고리의 다른 글

해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
테이블 정보 조회  (0) 2015.01.16
오라클 단일행 함수 정리  (0) 2014.11.05
오라클 PARTITION BY  (1) 2014.10.30
해당 숫자에 몇건이 있는가?  (0) 2014.06.25

오라클 단일행 함수 정리

개발/DB 2014. 11. 5. 18:05
1. 숫자 처리 함수 :  수 값을 인수로 받아서 처리하기 위한 함수다.

ABS  : 인수의 절대값을 반환한다.
select abs(-10) from dual;
 abs(-10)
 10

ACOS : 인수에 대한 역코사인 값을 반환한다.
select acos(0.1) from dual;
 acos(0.1)
 1.47062890563333682288579851218705812354

ASIN : 인수에 대한 역사인 값을 반환한다.
select asin(0.1) from dual;
 asin(0.1)
 0.10016742116155979634552317945269331856

ATAN : 인수에 대한 역탄젠트 값을 반환한다.
select atan(0.1) from dual;
 atan(0.1)
 0.0996686524911620273784461198780206049018

ATAN2 : 인수 n1/n2에 대한 역탄젠트 값을 반환한다.
select atan2(2,5) from dual;
 atan2(2,5)
 0.3805063771123648863035879168104337074528

BITAND : 인수들의 이진비트를 and한 값을 10진수로 반환한다.
select bitand(7,5) from dual;
 bitand(6,5)
 4
6 = 110(2)
5 = 101(2)
and값 = 100(2) = 4

CEIL : 인수의 같거나 큰수중 가장 작은 정수를 반환한다.
select ceil(6.01) from dual;
 ceil(6.01)
 7

COS : 인수에 대한 코사인 값을 출력한다.
select cos(3) from dual;
cos(3)
 -0.98999249660044545727157279473126130238

COSH :인수에 대한 하이퍼 콜릭 코사인 값을 반환한다.
select cosh(3) from dual;
 cosh(3)
 10.06766199577776584195393603511588983682

EXP : 자연대수 e에 인수n제곱한 값을 반환한다.
select Exp(5) from dual;
 Exp(5)
 148.413159102576603421115580040552279624

FLOOR : 인수보다 작거나 같은 정수들 중 가장 큰 값을 반환한다.
select floor(6.5) from dual;
 floor(6.5)
 6

LN : 0보다 큰 인수의 자연로그 값을 반환한다.
LOG : 인수n1 를 밑으로 하는 인수n2 의 로그 값을 반환한다.
MOD : 인수n1을 인수n2로 나눈 나머지 값을 반환한다.
NANVL : 인수n1이 숫자가 아닐경우, 인수n2값을 반환한다. n1이 숫자일 경우 n1을 반환.
POWER : 인수n1에 인수n2 제곱한 값을 반환.
REMAINDER : 
인수n1을 인수n2로 나눈 나머지 값을 반환한다. mod와는 공식이 다르다.
ROUND (number) : 인수n1를 소수점 인수n2 자리까지 반올림한 값을 반환.
SIGN : 인수의 부호를 반환. 값이-1일경우 음수, 0일경우 인수의 값이 0, 1일경우 양수.
SIN :인수에 대한 사인값을 반환
SINH :인수에 대한 하이퍼 볼릭 사인값을 반환
SQRT : 인수의 제곱근을 반환
TAN :인수에 대한 탄젠트 값을 반환
TANH  : 인수에 대한 하이퍼 볼릭 탄젠트 값을 반환
TRUNC (number)  : 인수n1의 인수n2소수점 자리까지 버림을 한다.
WIDTH_BUCKET : 최소값 인수n2, 최대값 인수n3 사이의 숫자를 구간 인수n3을 나누고, 인수n1이 몇번째 구간에 있는지를 반환.
 

 
2.  문자 처리 함수 : 문자(열) 값을 인수로 받아서 처리하기 위한 함수다.
 
CHR : 바이너리값 인수n1에 해당하는 문자를 반환.
CONCAT : 문자열 인수 들을 연결한다.
INITCAP : 문자열의 첫문자를 대문자로 바꾼다
LOWER : 문자열 전부를 소문자로 바꾼다.
LPAD : 인수n1 문자열앞에 인수n3 문자열을 추가한다. 더한 전체 문자열은 인수n2의 숫자만큼이다. 

LTRIM : 문자열 인수n1의 왼쪽 인수n2를 없앤 문자열을 반환.
NLS_INITCAP :조건부 첫문자열을 대문자로 변환
NLS_LOWER : 조건부 대문자를 소문자로 변환
NLSSORT : 조건부 정렬
NLS_UPPER : 조건부 소문자를 대문자로 변환
REGEXP_REPLACE : 지정한 패턴을 가진 문자열을 찾음.
REGEXP_SUBSTR : 문자열을 포함한 
지정한 패턴을 가진 문자열을 찾음.
REPLACE : 문자의 일부를 다른 문자열로 변경
RPAD : 특정한 문자열을 추가(right)해서 문자열 길이를 늘림
RTRIM :
문자열 인수n1의 오른쪽 인수n2를 없앤 문자열을 반환.
SOUNDEX : 영문 발음이 비슷한 그룹의 번호를 반환.
B, F, P, V = 1 C, G, J, K, Q, S, X, Z = 2 D, T = 3 L = 4 M, N = 5 R = 6
이외의 것은 미리 제거.

SUBSTR : 특정위치(인수n1)에서 몇개(인수n2)의 문자를 잘라 반환한다.
TRANSLATE 인수n1 문자열에 포함된 일부의 문자열 n2를 다른 문자열n3으로 변환한다.
TREAT : 인수의 선언된 형을 바꾼다.
TRIM : 조건으로 지정된 문자를 제거한다.
UPPER : 소문자에서 대문자로 변환한다.
 

 
3. 날짜 연산 함수 : 날짜 데이터 타입에 사용하는 함수다.

- 오라클 날짜 함수
ADD_MONTHS : 달수를 증가시킨다.
CURRENT_DATE : 현재 날짜를 반환한다.
CURRENT_TIMESTAMP : 현재 날짜와 시간 정보를 반환한다.
DBTIMEZONE 
 : 데이터베이스 시간대의 값을 반환합니다
EXTRACT (datetime) : 인수의 지정한 시간대를 출력. year,month등등..
FROM_TZ  
TIMESTAMPDBTIMEZONE 의 데이텉 타입을 timestamp with tome zone 타입으로 변환.
LAST_DAY : 지정한 달의 마지막 날짜를 반환.
LOCALTIMESTAMP  
TIMESTAMP의 현재 날짜와 시간을 출력.
MONTHS_BETWEEN : 지정한 두 날짜의 달 차이를 출력.
NEW_TIME : 첫번째시간대에 해당하는 날짜를 두번때 시간대로 변환.
NEXT_DAY : 지정한 날짜로부터 다음오는 지정한 요일이 몇일인지 반환.
NUMTODSINTERVAL 시간을 지정된 숫자로 변환.
NUMTOYMINTERVAL 날짜를 지정된 숫자로 변환.
ROUND (date) 날짜를 지정한 시간대의 첫번째 날을 출력.
SESSIONTIMEZONE : 현재 세션의 시간대를 반환.

SYS_EXTRACT_UTC :
시 간대 오프셋 또는 시간대 지역 이름을 datetime 값에서 UTC를 추출
SYSDATE : 데이터베이스의 날짜를 반환.
SYSTIMESTAMP 데이터베이스의 시간대를 반환.
TO_CHAR (datetime) 현재 시간을 문자열 형태로 반환.
TO_TIMESTAMP 지정한 
TIMESTAMP형태로 날짜와 시간을 변환
TO_TIMESTAMP_TZ 
지정한 TIMESTAMP형태의 날짜와 시간을 timestamp with tome zone 타입으로 변환
TO_DSINTERVAL  시간을 문자열 형태의 지정한 숫자로 변환.
TO_YMINTERVAL  날짜를 
문자열 형태의 지정한 숫자로 변환.
TRUNC (date) : 날짜를 지정한 기준으로 특정시간을 버림.
TZ_OFFSET  : 
문이 실행될 날짜를 기준으로 인수에 해당하는 시간대 오프셋을 반환

4.  형변환 함수 : 각각의 숫자, 문자, 날짜의 데이터 형을 변환해야하는 경우 사용하는 함수다.

- 오라클 변환 함수
 
ASCIISTR : 문자열의 아스키코드를 반환.
BIN_TO_NUM : 숫자의 2진코드로 변환.
CAST : 다른 데이터 형식으로 변환.
CHARTOROWID : 16진수의 바이너리코드를 해당 문자로 변환.
COMPOSE : 유니코드 형식의 코드를 해당 문자로 변환.
CONVERT :
하나의 문자 세트에서 다른 문자열로 변환
DECOMPOSE : 입력된 형태의 문자열을 유니코드에 해당되는 문자로 변환.
HEXTORAW  입력된 16진수의 값을 raw형태로 변환.
NUMTODSINTERVAL 각각 입력된 시간에 지정된 숫자의 차를 반환.
NUMTOYMINTERVAL 
각각 입력된 날짜에 지정된 숫자의 차를 반환.
RAWTOHEX  처리과정을 거치지않은 입력된 데이터를 16진수로 변환.
RAWTONHEX 
처리과정을 거치지않은 입력된 데이터를 16진수에 해당하는 데이터로 변환.
ROWIDTOCHAR : 
ROWID값을 18자 크기의 varchar2형으로 변환.
ROWIDTONCHAR 
ROWID값을 18자 크기의 nvarchar2형으로 변환. 
SCN_TO_TIMESTAMP : scn을 timestamp로 변환.
TIMESTAMP_TO_SCN  : 
timestamp을 scn로 변환.
TO_BINARY_DOUBLE : 인수를 더블 형태의 부동소수점 데이터형으로 변환.
TO_BINARY_FLOAT : 
인수를 플롯 형태의 부동소수점 데이터형으로 변환.
TO_CHAR (character) : 문자열 형식(
NCHAR , NVARCHAR2 , CLOB ,NCLOB)을 항상 varchar2 형태의 데이터로 변환.
TO_CHAR (datetime) : 
TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE의 데이터 형식을 varchar2 형식으로 변환.
TO_CHAR (number) : number, float, double 형식의 데이터를 varchar2 형식으로 변환.
TO_CLOB : lob칼럼의 nclob 혹은 다른 문자 스트링을 clob으로 구하는 함수.
TO_DATE : char, varchar2, ncar, nvarchar2 데이터 형을 date데이터 형식으로 변환.
TO_DSINTERVAL : 
char, varchar2, ncar, nvarchar2 데이터 형을 interval day to second 데이터 형으로 변환.
TO_LOB : long, log raw 컬럼의 데이터를 lob형싱 데이터로 변환.
TO_MULTI_BYTE :single 바이트 문자를 포함한 모든 문자열을 다중바이트 문자열로 변환.
TO_NCHAR (character) : 문자 스트링, clob, nclob 형식 데이타를 nchar형태의 데이터로 변환.
TO_NCHAR (datetime) : 모든 시간 데이터를 nchar형태의 데이터로 변환.
TO_NCHAR (number) : 모든 숫자 형식 데이터를 nchar형태의 데이터로 변환.
TO_NCLOB : 
lob칼럼의 clob 혹은 다른 문자 스트링을 nclob으로 구하는 함수.
TO_NUMBER : 숫자를 포함하는 문자열 데이터를 숫자형식의 데이터로 변환.
TO_SINGLE_BYTE : 다중 바이트 문자열을 single 문자데이터로 변환.
TO_TIMESTAMP : 
 char, varchar2, ncar, nvarchar2 형식 데이터를 timestamp 형식 데이터로 변환.
TO_TIMESTAMP_TZ : 
char, varchar2, ncar, nvarchar2 형식 데이터를 timestamp time zone형식 데이터로 변환.
TO_YMINTERVAL 
char, varchar2, ncar, nvarchar2 형식 데이터를 interval year to month 형식 데이터로 변환.
TRANSLATE ... USING : 문자열을 지정한 문자형식 코드로 변환.
UNISTR : 문자열을 nchar 형식으로 변환.

'개발 > DB' 카테고리의 다른 글

테이블 정보 조회  (0) 2015.01.16
오라클 UPDATE SELECT 문  (0) 2014.11.06
오라클 PARTITION BY  (1) 2014.10.30
해당 숫자에 몇건이 있는가?  (0) 2014.06.25
해당월의 마지막 날짜 구하는 쿼리  (0) 2014.05.13

오라클 PARTITION BY

개발/DB 2014. 10. 30. 14:48

데이터를 SELECT 하는 도중 동일 데이터에 대해서 몇개를 가지고 있는지 알고 싶었다.

예를 들면 우리가족이 몇명인지 알고 싶을때,

먼저 가족코드 라는 것을 '777'로 우리 가족 3명에게 모두 주었다.

SELECT COUNT(가족코드) OVER (PARTITION BY 가족코드) AS TEL_LINE FROM 가족

이런식으로 코딩을 하면 동일 가족코드에 데이터가 몇개있는지 COUNT를 세서 알 수 있다.

 

'개발 > DB' 카테고리의 다른 글

오라클 UPDATE SELECT 문  (0) 2014.11.06
오라클 단일행 함수 정리  (0) 2014.11.05
해당 숫자에 몇건이 있는가?  (0) 2014.06.25
해당월의 마지막 날짜 구하는 쿼리  (0) 2014.05.13
TABLESPACE, TRUCATE  (0) 2014.04.07

checkbox 사용

개발/실전 2014. 10. 29. 17:29

체크 박스 4개가 있어서

쿼리문의 OR로 사용 하려했다.

각각 A~D값을 가지고 있을때 

query += AND ( A='Y' OR B='Y') 이런식으로 체크한것에 대한 값을 OR 로 가져오고 싶었다 

여기선 A와 B를 체크했다고 가정해봅니다.

 

<input type="checkbox" name="benefit" value="A"<%=benefits.indexOf("A")>=0?"checked":""%>>A
<input type="checkbox" name="benefit" value="B"<%=benefits.indexOf("B")>=0?"checked":""%>>B
<input type="checkbox" name="benefit" value="C"<%=benefits.indexOf("C")>=0?"checked":""%>>C         

<input type="checkbox" name="benefit" value="D"<%=benefits.indexOf("D")>=0?"checked":""%>>D

 

이런식으로 체크박스를 선언하고

<%

String[] benefit = request.getParameterValues("benefit");   //배열로 값을 가져온다.

String benefits = ""; // 임의의 변수를 하나 추가해준다.

int i=0;

 

if(benefit != null){            //만약 체크박스가 null 값이 아니라면
  for(i=0;i<benefit.length;i++){   //i값은 benefit의 값보다 작고 증가 .
   benefits += (" "+benefit[i]+" = 'Y' OR");   //임의의 변수 추가해준것에 넣어준다

                                                            // 결과적으로는

                                                             //benefits = A='Y' OR B='Y' OR 의 값이 들어갔을 것이다.
  }
 }  

if(benefits.length() >0 ) //benefits 0보다 크므로
 {
  query += "AND ("+benefits.substring(0,benefits.length()-2)+") ";  //쿼리에 A='Y' OR B='Y' OR 값을 넣고

                                                                                             //substring으로 이용해서 OR를 자른다.
                                                                                 //결과적으로 query += AND(A='Y' OR B='Y')

 }

%>

 

'개발 > 실전' 카테고리의 다른 글

도메인 자동 주소 변경  (0) 2015.08.11
하루동안 열지 않기 [쿠키]  (0) 2015.04.01
오라클 long 타입 insert  (0) 2014.08.28
getInstance() 란 무엇인가  (0) 2014.06.18
현재시간함수  (0) 2014.06.05

오라클 long 타입 insert

개발/실전 2014. 8. 28. 17:52

DB 이관문제로 INSERT INTO SELECT 문을 사용했다

보통 테이블이라면 (LONG타입이 없다면)

 

INSERT INTO TABLE1

SELECT * FROM TABLE2

 

하면, TABLE2의 내용이 전부 TABLE1에 삽입되게 된다. (여기서 TABLE1,2 는 컬럼, 속성이 같다)

하지만 LONG타입의 컬럼이 들어가있다면

 

ORA-00997: LONG 데이터 유형은 사용할 수 없습니다

이런 에러를 볼 수있다.

 

처음에는 INSERT INTO TALBL2 (MEMO) SELECT TO_LOB(MEMO) FROM TABLE2

 

이런식으로 LONG 타입을 LOB으로 변형시켜서 넣었다

에러는 안났는데

TABLE2에 데이터가 안들어가있는것이였다..ㅠㅠ

 

그래서....다시 인터넷 검색해서 찾아봤다.( 어렵게 찾았다 ㅠㅠ사실 내가 찾은것도 아니지만..)

 

DECLARE
 BEGIN
     DECLARE CURSOR CURSOR_NAME IS
           SELECT BOARD_NUM, ROOT_NUM, PARENT_NUM, STEP, DEPTH, TITLE, WRITER, CONTENT,

    CON_TYPE, INSERT_DATE, VISITED,EMAIL, IPADDR, PASSWD

FROM PLUS_BOARD;
     BEGIN
         FOR I IN CURSOR_NAME LOOP     
             INSERT INTO PLUS_BOARD2 (BOARD_NUM, ROOT_NUM, PARENT_NUM, STEP, DEPTH, TITLE, WRITER, CONTENT, CON_TYPE, INSERT_DATE, VISITED,EMAIL, IPADDR, PASSWD)
             VALUES(I.BOARD_NUM, I.ROOT_NUM, I.PARENT_NUM, I.STEP, I.DEPTH, I.TITLE, I.WRITER, I.CONTENT, I.CON_TYPE, I.INSERT_DATE, I.VISITED,I.EMAIL, I.IPADDR, I.PASSWD);
         END LOOP;
     END;
 END;

 

즉,

 

DECLARE
 BEGIN
     DECLARE CURSOR CURSOR_NAME IS
           SELECT COLUMN1, COLUMN2   --테이블의 모든 컬럼을 넣어준다

     FROM TABLE2;
     BEGIN
         FOR I IN CURSOR_NAME LOOP     
             INSERT INTO TABLE1 (COLUMN1, COLUMN2)   --테이블의 모든 컬럼을 넣어준다           

            VALUES(I.COLUMN1, I.COLUMN2); --테이블의 모든 컬럼을 넣어준다            
         END LOOP;
     END;
 END;

 

원리는 모르겠지만 일단 성공은 했다.....

 

 

'개발 > 실전' 카테고리의 다른 글

하루동안 열지 않기 [쿠키]  (0) 2015.04.01
checkbox 사용  (0) 2014.10.29
getInstance() 란 무엇인가  (0) 2014.06.18
현재시간함수  (0) 2014.06.05
executeQuery, executeUpdate  (0) 2014.06.03

해당 숫자에 몇건이 있는가?

개발/DB 2014. 6. 25. 11:07

SMS를 보내는데 SMS값이 각각 다르다.

한달동안 보낸 SMS건수를 가격별로 몇건인지 알고 싶다.(예 - 10원:10건 20원:30건)

 

SELECT CSM_AMT, COUNT(1) CNT

 FROM CALL_HIST

 WHERE CSM>0

        AND FROM_TIME BETWEEN TO_DATE('20140401000000','YYYYMMDDHH24MISS') AND TO_DATE('20140430235959','YYYYMMDDHH24MISS')
        AND TYPE = '6'
    GROUP BY CSM_AMT

'개발 > DB' 카테고리의 다른 글

오라클 단일행 함수 정리  (0) 2014.11.05
오라클 PARTITION BY  (1) 2014.10.30
해당월의 마지막 날짜 구하는 쿼리  (0) 2014.05.13
TABLESPACE, TRUCATE  (0) 2014.04.07
날짜 갖고 놀기  (0) 2014.03.28