<head>

<link rel="shortcut icon" href="/images/smc.ico" type="image/x-icon">

</head>

파비콘(favicon) : favorites + icon => 주소창 아이콘

전 페이지 download.asp?file=파일명


download.asp 파일

<%
    file = request("file")
    '파일 이름

    Response.ContentType = "application/unknown"
    'ContentType 를 선언합니다.

    Response.AddHeader "Content-Disposition","attachment; filename=" & file 
    '헤더값이 첨부파일을 선언합니다.

    Set objStream = Server.CreateObject("ADODB.Stream")
    'Stream 을 이용합니다.

    objStream.Open
    '무엇이든 Set 으로 정의했으면 열어야 겠지요^^

    objStream.Type = 1

    objStream.LoadFromFile Server.MapPath("./upload/")&"\"& file
    '절대경로 입니다.

    download = objStream.Read
    Response.BinaryWrite download 
    '이게 보통 Response.Redirect 로 파일로 연결시켜주는 부분을 대신하여 사용된 것입니다.

    Set objstream = nothing 
    '초기화시키구요.

%>
출처 : http://www.taeyo.pe.kr/Lecture/20_TIps/Danny03.asp

1. Expression Language(표현 언어 또는 익스프레션 언어)

- 값을 표현하는데 사용되는 새로운 스크립트 언어로 JSP의 기본문법을 보완하는 역활을 한다.

- JSP 네 가지 기본 객체가 제공하는 영역의 속성 사용

- 집합 객체에 대한 접근 방법 제공

- 수치 연산, 관계 연산, 논리 연산자 제공

- 자바 클래스 메서드 호출 기능 제공

- 표현 언어만의 기본 객체 제공


2. EL 기본 문법

- ${식}

- 식 부분에는 표현 언어가 정의한 문법에 따라 값을 표현하는 식이 온다. (액션태그 또는 커스텀태그의 속성 값, 표현식)

- JSP의 스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용될 수 있다.


- #{식}

- Deferred Expression 이라고 한다.

- JSP 2.1 버전부터 새롭게 지원하는 구문으로 JSF(JavaServer Faces)에서 사용되던 표현 언어 구문이다.

- ${식}은 표현식이 실행되는 시점에 곧바로 값을 계산하고 #{식}은 실제로 값이 실제로 필요한 시점에 값을 계산한다.

- JSP 템플릿 텍스트에서는 사용할 수 없고, 허용되는 태그의 속성에만 위치할 수 있다.


3. EL 기본 객체

- 표현 언어도 11개의 기본 객체를 제공한다.

- 값이 존재하지 않을 경우 null을 출력하지 않고 아무것도 출력하지 않는다.


 기본 객체

 설명

 pageContext

 JSP의 page 기본 객체와 동일하다. 

 pageScope 

 pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체 

 requestScope 

 request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체 

 sessionScope

 session 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체 

 applicationScope 

 application 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체 

 param 

 요청 파라미터의 <파라미터이름, 값> 매핑을 저장한 Map 객체, 타입은 String (request.getParameter(이름)의 결과와 동일)

 paramValues

 요청 파라미터의 <파라미터이름, 값 배열>매핑을 저장한 Map 객체, 타입은 String[] (request.getParameterValues(이름)의 결과와 동일)

 header

 요청 정보의 <헤더이름, 값> 매핑을 저장한 Map 객체 (request.getHeader(이름)의 결과와 동일)

 headerValues

 요청 정보의 <헤더이름, 값 배열> 매핑을 저장한 Map 객체 (request.getHeaders(이름)의 결과와 동일)

 cookie

 <쿠키 이름, Cookie> 매핑을 저장한 Map 객체 (request.getCookies()로 구한 Cookie 배열로 부터 매핑을 생성) 

 initParam

 초기화 파라미터의<이름, 값> 매핑을 저장한 Map 객체 (application.getInitParameter(이름)의 결과와 동일) 


<!-- elForm.jsp  -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>표현 언어</title>
</head>
<body>
	<form action="elResult.jsp" method="post">
		아이디 : <input type="text" name="id">
		<br>
		<br>
		회원님이 관심있는 스포츠를 선택하세요
		<br>
		축구<input type="checkbox" name="sports" value="축구">
		농구<input type="checkbox" name="sports" value="농구">
		야구<input type="checkbox" name="sports" value="야구">
		골프<input type="checkbox" name="sports" value="골프">
		<br>
		<br>
		<input type="submit" value="확인"><input type="reset" value="취소">
	</form>
</body>
</html>


<!-- web.xml -->

	<context-param>
		<description>테스트 파라미터1</description>
		<param-name>testParamName</param-name>
		<param-value>GZ</param-value>
	</context-param>

	<context-param>
		<description>테스트 파라미터2</description>
		<param-name>testParamAge</param-name>
		<param-value>25</param-value>
	</context-param>


<!-- elResult.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); %> <% request.setAttribute("name", "갱짱"); %> <!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=UTF-8"> <title>표현 언어</title> </head> <body> 초기화 파라미터 이름 : ${ initParam.testParamName }<br> 초기화 파라미터 나이 : ${ initParam.testParamAge } <hr> 요청 URI : ${ pageContext.request.requestURI } <hr> request의 name 속성 : ${ requestScope.name } <hr> 아이디 : ${ param.id }<br> 선택한 운동 : ${ paramValues.sports[0] }     ${ paramValues.sports[1] }     ${ paramValues.sports[2] }     ${ paramValues.sports[3] } </body> </html>



4. EL 데이터 타입

- 불리언(Boolean) 타입 : true, false

- 정수 타입 : 0 ~ 9로 이루어진 정수 값, 음수의 경우'-'가 붙는다.

- 실수 타입 : 0 ~ 9로 이루어져 있고, 소수점('.')을 사용할 수 있고, 3.24e3과 같이 지수형으로 표현 가능하다.

- 문자열 타입 : 따옴표(' 또는 ")로 둘러싼 문자열, 만약 홑따옴표(')를 사용시 표현할 경우 값에 포함된 작은 따옴표는 \'로 입력한다. \기호는 \\로 표시한다.

- 널 타입 : null


5. EL 객체 접근

- ${ <표현1>.<표현2> } 또는 ${ <표현1>[<표현2>] } 형식을 사용한다.

- <표현1>을 <값1>로 변환한다.

- <값1>이 null이면 null을 리턴한다.

- <값1>이 null이 아니면 <표현2>를 <값2>로 변환한다.

- <값2>가 null이면 null을 리턴한다.

- <값1>이 Map, List, 배열인 경우

- <값1>이 Map 이면

- <값1>.containsKey(<값2>)가 false이면 null을 리턴한다.

- 그렇지 않으면 <값1>.get(<값2>)를 리턴한다.

- <값1>이 List나 배열이면

- <값2>가 정수값인지 검사한다.(정수값이 아닐 경우 에러 발생)

- <값1>.get(<값2>) 또는 Array.get(<값1>, <값2>)를 리턴한다.

- 위 코드가 익셉션을 발생하면 에러를 발생한다.

- <값1>이 다른 객체이면

- <값2>를 문자열로 변환한다.

- <값1>이 이름이 <값2>이고 읽기 가능한 프로퍼티를 포함하고 있다면 프로퍼티의 값을 리턴한다.

-  그렇지 않을 경우 에러를 발생한다.


6. EL 객체의 탐색

- ${ EL기본객체영역.이름 } 또는 ${ 이름 }

- PAGE, REQUEST, SESSION, APPLICATION 영역에 저장된 속성에 접근 할 때에는 pageScope, requestScope, sessionScope, applicationScope 기본객체를 사용한다.

- 영역을 나타내는 EL 기본객체를 사용하지 않고 이름만 지정할 경우 EL은 네개의 영역을 차례대로 검색해서 속성이 존재하는지 확인한다.

- 단 영역별로 이름이 같은 객체가 있을 경우 작은 영역이 우선이다. (page < request < session < application)


7. EL 수치 연산자

- '+' : 덧셈

- '-' : 뺄셈

- '*' : 곱셈

- '/' 또는 div : 나눗셈

- '%' 또는 mod : 나머지

- 숫자가 아닌 객체와 수치 연산자를 사용할 경우 객체를 숫자 값으로 변환한 후 연산자를 수행한다. (단, 숫자로 변환할 수 있는 객체)

- 객체가 null이면 0으로 처리된다.

- 나눗셈 연산자는 피연산자를 Double 타입으로 변환한 뒤 연산을 수행한다.


8. EL 비교 연산자

- '==' 또는 eq : 같은가

- '!=' 또는 nu : 같지 않은가

- '<' 또는 lt : 작은가

- '>' 또는 gt : 큰가

- '<=' 또는 le : 작거나 같은가

- '>=' 또는 ge : 크거나 같은가


<!-- elOp.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
	pageContext.setAttribute("name", "페이지네임");
	request.setAttribute("name", "리퀘스트네임");
	session.setAttribute("name", "세션네임");
	application.setAttribute("name", "어플리케이션네임");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>표현 언어</title>
</head>
<body>
	<h1>객체</h1>
	name : ${ name }<br>
	pagename : ${ pageScope.name }<br>
	requestName : ${ requestScope.name }<br>
	sessionName : ${ sessionScope.name }<br>
	applicationName : ${ applicationScope.name }<br>
	<hr>
	
	<h1>수치 연산자</h1>
	더하기 : ${ 10 + 10 }<br>
	빼기 : ${ '10' - 10 }<br>
	곱하기 : ${10 * "10" }<br>
	몫 : ${'40' div '6' }<br>
	나머지 : ${40 mod 6 }<br>
	<hr>
	
	<h1>비교 연산자</h1>
	같은가 : ${ 10 eq 10 }<br>
	다른가 : ${ 10 eq 10 }<br>
	작은가 : ${ 10 lt 10 }<br>
	큰가 : ${ 10 gt 10 }<br>
	작거나같은가 : ${ 10 le 10 }<br>
	크거나같은가 : ${ 10 ge 10 }<br>
	<hr>
</body>
</html>

<!-- 
	실행 결과
	
	객체

	name : 페이지네임
	pagename : 페이지네임
	requestName : 리퀘스트네임
	sessionName : 세션네임
	applicationName : 어플리케이션네임
	--------------------------------------------------
	
	수치 연산자
	
	더하기 : 20
	빼기 : 0
	곱하기 : 100
	몫 : 6.666666666666667
	나머지 : 4
	--------------------------------------------------
	
	비교 연산자
	
	같은가 : true
	다른가 : true
	작은가 : false
	큰가 : false
	작거나같은가 : true
	크거나같은가 : true
 -->


9. EL 논리 연산자

- '&&' 또는 and : 그리고

- '||' 또는 or : 이거나

- '!' 또는 not : 부정


10. EL empty 연산자

- empty <값>

- 검사할 객체가 null 인지 검사하기 위해 사용한다.

- <값>이 null이면 true

- <값>이 빈 문자열("")이면 true

- <값>이 길이가 0인 배열이면 true

- <값>이 빈 Map이면 true

- <값>이 빈 Collection이면 true

- 이 외의 경우에는 false


11. EL 비교 선택 연산자

- <수식> ? <값1> : <값2>

- <수식>의 결과값이 ture 이면 <값1>을 리턴하고, false이면 <값2>를 리턴한다.


12. EL 연산자 우선순위

- 우선순위가 높은순으로 먼저 실행되고, 같을 경우 왼쪽에서 오른쪽으로 진행된다.

-    []    .

-    ()

-    -(단일)    not    !    empty

-    *    /    div    %    mod

-    +    -

-    <    >    <=    >=    lt    gt    le    ge

-    ==    !=    eq    ne

-    &&    and

-    ||    or

-    ? :


13. EL 특수문자 처리

- \${식} 또는 \#{식}

- JSP 템플릿 텍스트에서 처리할때 앞에 역슬래시(\)를 위치시킨다.


14. EL 객체의 메서드 호출

- JSP 2.2 버전에 추가된 기능으로 객체의 메서드를 직접 호출할 수 있다.

- 자바빈스타일의 메서드, 리턴타입이 void이거나 파라미터 개수의 관계없이 호출 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// ELMethod.java
 
package com.tistory.gangzzang;
 
import java.util.HashMap;
import java.util.Map;
 
public class ELMethod {
     
    private Map memberMap = new HashMap();
     
    public int sumNumber(int num1, int num2) {
        return num1 + num2;
    } // sumNumber : 두 정수를 더한다.
     
    public void setMember(String name, String tel) {
        memberMap.put(name, tel);
    } // setMember : memberMap에 회원 추가한다.
     
    public String getMember(String name) {
        return memberMap.get(name);
    } // getMember : memberMap에서 회원 이름의 연락처를 얻는다.
     
    public String getInfo() {
        return "EL 메서드 호출";
    } // getInfo : 정보 출력
     
} // ELMethod
<!-- elMethod.jsp -->

<%@page import="com.tistory.gangzzang.ELMethod"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	ELMethod elMethod = new ELMethod();
	request.setAttribute("el", elMethod);
%>
<!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=UTF-8">
<title>EL 메서드</title>
</head>
<body>
	${ el.getInfo() }
	<br><br>
	회원 추가 : ${ el.setMember('Gz', '01012345678') }
	<br><br>
	회원 연락처 : ${ el.getMember('Gz')  }
	<br><br>
	두 정수의 합 : ${ el.sumNumber(5, 10) }
</body>
</html>

<!-- 
	실행결과
	
	EL 메서드 호출 

	회원 추가 : 

	회원 연락처 : 01012345678 

	두 정수의 합 : 15
 -->



15. EL 클래스 정적 메서드 호출

- JSP 2.2 버전 이하에서는 위처럼 호출이 불가능하다.

- JSP 2.0 버전 이상부터 지원되는 정적(static) 메서드 호출 방법이 있다.


15-1. 클래스에 static 메서드 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// ELStaticMethod.java
 
package com.tistory.gangzzang;
 
import java.util.HashMap;
import java.util.Map;
 
public class ELStaticMethod {
     
    private static Map memberMap = new HashMap();
     
    public static int sumNumber(int num1, int num2) {
        return num1 + num2;
    } // sumNumber : 두 정수를 더한다.
     
    public static void setMember(String name, String tel) {
        memberMap.put(name, tel);
    } // setMember : memberMap에 회원 추가한다.
     
    public static String getMember(String name) {
        return memberMap.get(name);
    } // getMember : memberMap에서 회원 이름의 연락처를 얻는다.
     
    public static String getInfo() {
        return "EL 메서드 호출";
    } // getInfo : 정보 출력
     
} // ELMethod


15-2. EL 메서드를 정의한 TLD 파일 작성

- TLD(Tag Library Descriptor) : 태그 라이브러리에 대한 설정 정보를 담고 있다.

- TLD 파일은 WEB-INF\tlds 디렉터리에 위치시킨다.


<?xml version="1.0" encoding="UTF-8"?>
<!-- WEB-INF\tlds\el-functions.tld -->

<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>functions</short-name> <function> <name>elSum</name> <function-class>com.tistory.gangzzang.ELStaticMethod</function-class> <function-signature> java.lang.Integer sumNumber(java.lang.Integer, java.lang.Integer)</function-signature> </function> <function> <name>elSet</name> <function-class>com.tistory.gangzzang.ELStaticMethod</function-class> <function-signature> void setMember(java.lang.String, java.lang.String)</function-signature> </function> <function> <name>elGet</name> <function-class>com.tistory.gangzzang.ELStaticMethod</function-class> <function-signature> java.lang.String getMember(java.lang.String)</function-signature> </function> <function> <name>elInfo</name> <function-class>com.tistory.gangzzang.ELStaticMethod</function-class> <function-signature> java.lang.String getInfo()</function-signature> </function> </taglib>



15-3. web.xml 파일에 TLD 파일 지정

<?xml version="1.0" encoding="UTF-8"?>

<!-- web.xml -->

<web-app 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID"
	version="2.5">
	
	<jsp-config>
		<taglib>
			<taglib-uri>/WEB-INF/tlds/el-functions.tld</taglib-uri>
			<taglib-location>/WEB-INF/tlds/el-functions.tld</taglib-location>
		</taglib>
	</jsp-config>
	
</web-app>


15-4. JSP 코드에서 TLD 파일에 정의한 함수 실행

- taglib 디렉티브는 web.xml 파일에서 설정한 태그 라이브러리를 JSP 페이지에서 사용한다는 것을 명시한다.

- taglib에 prefix 속성은 태그 라이브러리를 구분할 때 사용할 접두어를 나타낸다.

- EL 에서 태그 라이브러리에 정의된 메서드를 사용하려면 ${태그라이브러리접두어:메서드() } 코드를 사용한다.

- 단, 실제 사용할 클래스의 메서드이름이 아닌 TLD 파일의 <name> 태그에서 지정한 이름을 사용한다.


<!-- elStaticMethod.jsp -->

<%@page import="com.tistory.gangzzang.ELMethod"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="el" uri="/WEB-INF/tlds/el-functions.tld"%>
<%
	ELMethod elMethod = new ELMethod();
	request.setAttribute("el", elMethod);
%>
<!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=UTF-8">
<title>EL static 메서드</title>
</head>
<body>
	${ el:elInfo() }
	<br><br>
	회원 추가 : ${ el:elSet('Gz', '01012345678') }
	<br><br>
	회원 연락처 : ${ el:elGet('Gz')  }
	<br><br>
	두 정수의 합 : ${ el:elSum(5, 10) }
</body>
</html>

<!-- 
	실행결과
	
	EL 메서드 호출 

	회원 추가 : 

	회원 연락처 : 01012345678 

	두 정수의 합 : 15
 -->



16. EL 사용 및 활용

- <jsp:foword> <jsp:include>에 속성으로 전달한 값 활용

<%
	request.setAttribute("boardInfo", boardInfo);
%>
<jsp:include page="<%= includedPage %>" flush="false" />

<!-- 포함되는 JSP에서 스크립트릿과 표현식을 사용하는 경우 -->
<%
	BoardInfo boardInfo = (BoardInfo) request.getAttribute("boardInfo");
%>
이름 : <%= boardInfo.getName() %>

<!-- 포함되는 JSP에서 EL 사용하는 경우 -->
이름 : ${boardInfo.name}


- 액션 태그나 커스텀 태그의 속성값으로 사용

<jsp:include page="/layout/top.jsp" flush="false" />

<!-- 표현식을 사용하는 경우 -->
<jsp:include page='<%="/layout/" + layout.getModuleName() + ".jsp" %>' flush="true" />

<!-- EL 사용하는 경우 -->
<jsp:include page="/layout/${ layout.moduleName }.jsp" flush="true" />



17. EL 비활성화

- web.xml 파일에 비활성화 옵션 설정

<!-- EL ${식} 비활성화 -->
<jsp-config>	
	<jsp-property-group>
		<url-pattern>/디렉터리명/*</url-pattern>
		<el-ignored>true</el-ignored>
	</jsp-property-group>
</jsp-config>

<!-- EL #{식} 비활성화 -->
<jsp-config>
	<jsp-property-group>
		<url-pattern>/디렉터리명/*</url-pattern>
		<deferred-syntax-allowed-as-literal>true</deferred-syntax-allowed-as-literal>
	</jsp-property-group>
</jsp-config>


- JSP 페이지내에서 page 디렉티브에서 비활성화 설정

- web.xml 파일 여부와 상관없이 page 디렉티브를 이용해서 활성화 또는 비활성화가 가능하다.

- isELIgnored : true일 경우 EL ${식}을 일반 문자열로 처리한다.

- deferredSyntaxAllowedAsLiteral : true일 경우 EL #{식}을 일반 문자열로 처리한다.

<!-- EL ${식} 비활성화 -->
<%@ page isELIgnored="true" %>

<!-- EL #{식} 비활성화 -->
<%@ page deferredSyntaxAllowedAsLiteral="true" %>


- web.xml 파일 버전에 따른 EL 자동 비활성화

- 서블릿 2.3 버전의 web.xml : EL 미지원

- 서블릿 2.4 버전의 web.xml : #{식} 미지원

- 서블릿 2.5 / 서블릿 3.0 버전의 web.xml : ${식}, #{식} 지원


- 비활성화 처리 여부

 web.xml <el-ignored>

 page isELIgnored 

 EL 처리여부 

 설정하지 않음

 설정하지 않음 

 web.xml 파일이 서블릿 2.3 또는 그 이전버전이라면 EL 처리하지 않는다.

 false

 설정하지 않음 

 EL 처리한다.

 true 

 설정하지 않음 

 EL 처리하지 않는다. 

 상관없음 

 false 

 EL 처리한다.

 상관없음

 true 

 EL 처리하지 않는다. 



 저작자 : http://gangzzang.tistory.com/112

'프로그래밍 > Servlet & JSP' 카테고리의 다른 글

jsp:include 와 <%@ include%> 차이  (1) 2012.09.13
SELECT * FROM (
SELECT (CASE WHEN MAIN.COLUMN_ID = 1 THEN MAIN.TABLE_COMMENTS ELSE '' END)  table_kor_name
     , (CASE WHEN MAIN.COLUMN_ID = 1 THEN MAIN.TABLE_NAME ELSE '' END ) table_eng_name
     , MAIN.COLUMN_ID column_id
     , MAIN.COLUMN_NAME column_name
     , MAIN.COLUMN_COMMENTS column_comments
     , (CASE WHEN MAIN.DATA_TYPE = 'VARCHAR2' THEN 'VARCHAR' ELSE MAIN.DATA_TYPE END ) AS data_type
     , (CASE MAIN.DATA_TYPE WHEN 'NUMBER' THEN ''
                            WHEN 'DATE'   THEN '' ELSE TO_CHAR(MAIN.DATA_LENGTH) END) data_type_length
     , (CASE NVL(MAIN.NULL_FLAG, 'N') WHEN 'N' THEN 'N' ELSE '' END) null_flag
     , (SELECT CONST.CONSTRAINT_NAME FROM USER_CONSTRAINTS CONST, USER_CONS_COLUMNS COLS, USER_CONS_COLUMNS R_COLS
         WHERE CONST.CONSTRAINT_NAME   = COLS.CONSTRAINT_NAME
           AND CONST.CONSTRAINT_TYPE = 'P'
           AND CONST.R_CONSTRAINT_NAME = R_COLS.CONSTRAINT_NAME(+)
           AND CONST.TABLE_NAME  = MAIN.TABLE_NAME
           AND COLS.COLUMN_NAME = MAIN.COLUMN_NAME) AS PK
      , ( SELECT DISTINCT CONST.CONSTRAINT_NAME||' ['||COLS.COLUMN_NAME||'('||CONST.R_CONSTRAINT_NAME||')]'
              FROM USER_CONSTRAINTS CONST
                 , USER_CONS_COLUMNS COLS
                 , USER_CONS_COLUMNS R_COLS
             WHERE CONST.CONSTRAINT_NAME = COLS.CONSTRAINT_NAME
               AND CONST.CONSTRAINT_TYPE = 'R'
               AND CONST.R_CONSTRAINT_NAME = R_COLS.CONSTRAINT_NAME(+)
               AND CONST.TABLE_NAME  = MAIN.TABLE_NAME
               AND COLS.COLUMN_NAME = MAIN.COLUMN_NAME
              -- AND rownum < 2
          ) AS FK
--     , (CASE SUB.CONSTRAINT_TYPE WHEN 'P' THEN 'PK' WHEN 'R' THEN 'FK ('||SUB.R_CONST_NAME||')' END) key_flag
  FROM (SELECT T_COMT.COMMENTS AS table_comments
             , T_COLS.TABLE_NAME AS table_name
             , C_COMT.COMMENTS AS column_comments
             , T_COLS.COLUMN_NAME AS column_name
             , (CASE T_COLS.NULLABLE WHEN 'Y' THEN 'Y' END) AS null_flag
             , T_COLS.DATA_TYPE AS data_type
             , T_COLS.DATA_LENGTH AS data_length
             , T_COLS.COLUMN_ID AS column_id
             , T_COLS.DATA_PRECISION AS data_precision
             , T_COLS.DATA_SCALE AS data_scale
          FROM USER_TAB_COLUMNS T_COLS
             , USER_TAB_COMMENTS T_COMT
             , USER_COL_COMMENTS C_COMT
         WHERE T_COLS.TABLE_NAME  = T_COMT.TABLE_NAME
           AND T_COLS.TABLE_NAME  = C_COMT.TABLE_NAME
           AND T_COLS.COLUMN_NAME = C_COMT.COLUMN_NAME
           AND T_COMT.TABLE_TYPE  = 'TABLE' ) MAIN
 WHERE MAIN.TABLE_NAME  = UPPER('테이블명')  /*특정 테이블 조회일 경우 사용.*/
)
 ORDER BY table_eng_name, PK, FK, COLUMN_ID 
;


-- 인덱스 조회
SELECT c.index_name
     , c.column_name
     , c.column_position
     , i.uniqueness 
  FROM user_indexes i
     , user_ind_columns c 
 WHERE c.index_name = i.index_name 
   AND c.table_name = '테이블명'; 


-- Foreing Key가 여러개 일 경우 조회
select distinct *
  from (
 SELECT CONST.CONSTRAINT_NAME, COLS.COLUMN_NAME, cols.position
  FROM USER_CONSTRAINTS CONST
     , USER_CONS_COLUMNS COLS
     , USER_CONS_COLUMNS R_COLS
 WHERE CONST.CONSTRAINT_NAME = COLS.CONSTRAINT_NAME
   AND CONST.CONSTRAINT_TYPE = 'R'
   AND CONST.R_CONSTRAINT_NAME = R_COLS.CONSTRAINT_NAME(+)
   AND CONST.TABLE_NAME  = '테이블명'
               --AND COLS.COLUMN_NAME = MAIN.COLUMN_NAME
 order by const.constraint_name, cols.position
 )
  order by constraint_name, position
   
	var screenWidth = screen.width;
	var popNum =0; //팝업 번호
	var popQuantity =4; //팝업 총 량
	
	var popLeft =5; //팝업 left 초기 셋팅
	var popInterval = 420; //팝업 left 간격
	var popTotalWidth = popQuantity * popInterval +popLeft ; //팝업 총 수량 * 팝업  left 간격  + 팝업 초기값
	var popMinusLeft=0; //빼야 할 레프트값 변수 선언
	
	if(screenWidth <= popTotalWidth ){ //해상도가 팝업 총 left 보다 작거나 같을 경우
		popMinusLeft = (popTotalWidth-screenWidth) /(popQuantity-1);  //(해상도 - 총 left 값) / (팝업 총 수량 -1)
	}

	if ( getCookie('open2') != 'done' ) {
		popNum++;
		noticeWindow1  =  window.open('../popup/popup_140113.html','open2','width=400,height=470,top=5,left=5');

		noticeWindow1.opener = self;    
	} 
	if ( getCookie('open1') != 'done' ){ 
		popLeft = popLeft + popInterval - popMinusLeft; //팝업 left 좌표 = 기존 left + 팝업 left 간격(크기) - 빼야할 값
		popNum++;
		//noticeWindow1  =  window.open('../popup/popup_131211.html','open1','width=400,height=470,top=5,left=425');  
		noticeWindow1  =  eval("window.open('../popup/popup_131211.html','open1','width=400,height=470,top=5,left="+popLeft+"');")
		noticeWindow1.opener = self;    
	}
	if ( getCookie('open4') != 'done' ){ 
		popLeft = popLeft + popInterval -popMinusLeft;
		popNum++;
		//var noticeWindow3  =  window.open('../popup/popup_140303.html','open4','width=400,height=470,top=5, left=845');
		var noticeWindow3 =eval("window.open('../popup/popup_140303.html','open4','width=400,height=470,top=5, left="+popLeft+"');");
		noticeWindow3.opener = self;    
	}
        //팝업 순서에 맞게 각각 left 값이 (-) 되어 적용된다.
       //현재 팝업 총량, 팝업 left 간격(width+@), 첫 팝업의 left 는 수동으로 해야 한다.
       //DB를 읽어와서 하는 형태가 아니므로 한계가 있는 것 같다. 더 보완 하도록!

http://blueray21.tistory.com/30


중요한건

 shCore.js와

shCore.css는 반드시 업로드해서 skin.html에서 가져와야 한다


css는 각 테마별로 하나씩만 넣으면 됨.

매번 사용 하려고 하면 까먹는 코드

찾기도 짜증나서 적어 놓음


On Error Resume Next

'에러나는 코드 넣을것

If Request.Form("sbmtMultiply")<>"" then 'If multiply is clicked

   Value=Cint(Request.Form("txtA"))*Cint(Request.Form("txtB"))

End If

If Request.Form("sbmtDivide")<>"" then 'If divide is clicked

   Value=Cint(Request.Form("txtA"))/Cint(Request.Form("txtB"))

End If

If Err.number<>0 then

   If Err.number=11 then  '11 is the number that occurs for division by zero.

      Response.Write "This is a custom message. You cannot divide by zero."

      Response.Write "Please type a different value in the second textbox!<p>"

else

      Response.Write "An Error Has Occurred on this page!<BR>"

      Response.Write "The Error Number is: " & Err.number & "<BR>"

      Response.Write "The Description given is: " & Err.Description & "<BR>"

   End If

End If


에러에 대한 번호화 에러 번호에 대한 설명해줌

자세하게 나오지는 않음.

 그냥 에러 날때 무엇인지는 확인 가능 하나

몇번째 줄인지는 나오질 않음

분명 나타나게 하는게 있을거임

내가 모를뿐


'base64를 이용한 복호화 함수

	Dim enc64List()
	Dim dec64List()
	Dim  c, d, e , ascValue, i, n, ascArrayValue
	Dim  input(), output, ptr

Function initBase64()  '초기화 함수

	For i=0 To 25
		ReDim Preserve enc64List(i)
'Response.write Ubound(enc64List)&"
" 'CHR ==String.fromCharCode enc64List(Ubound(enc64List)) = Chr(65 + i) 'Response.write "i : "& i & ", enc64List : "& enc64List(i)&"]
" Next For i=0 To 25 ReDim Preserve enc64List(i+26) enc64List(Ubound(enc64List)) = Chr(97 + i) 'Response.write "i+26 : "& i+26 & ", enc64List : "& enc64List(i+26)&"]
" Next For i=0 To 9 ReDim Preserve enc64List(i+26+26) enc64List(Ubound(enc64List)) = Chr(48 + i) 'Response.write "i+26+26 : "& i+26+26 & ", enc64List : "& enc64List(i+26+26)&"]
" Next ReDim Preserve enc64List(Ubound(enc64List)+1) enc64List(Ubound(enc64List)) = "+" ReDim Preserve enc64List(Ubound(enc64List)+1) enc64List(Ubound(enc64List)) = "/" 'Response.write "["&enc64List(ubound(enc64List)-1)&"]
" 'For i=0 To ubound(enc64List) ' Response.write "i : "& i & ", enc64List : "& enc64List(i)&"]
" 'next For i=0 To 127 ReDim Preserve dec64List(i) dec64List(Ubound(dec64List)) = -1 Next 'Response.write "["&ubound(dec64List)&"]
" For i=0 To 63 ReDim Preserve dec64List(i+127) 'dec64List[enc64List[i].charCodeAt(0)] = i; dec64List(Asc(Left(enc64List(i),1))) = i 'Response.write i & " : " &Asc(Left(enc64List(i),1)) & "
" Next End Function Function base64Decode(value) c=0 d=0 ascValue=0 ptr =0 n=0 output = "" initBase64() '초기화함수를 이용하여 디코더 함수 배열 초기화 'Response.write "

" 'Response.write "value : ["& value&"]
" 'input = Split(value, "") ' ""로 잘라서 input 배열 생성 ReDim input(Len(value)-1) 'asp split 은 "" 으로 자를 수 없어서 for 문 활용 For i=0 To Len(value)-1 input(i) = Mid(value, i+1,1) ' Response.write "input : ["& input(i)&"]
" Next 'Asc(value) ==charCodeAt() ascValue = Asc(Left(input(ptr),1)) '배열의 인덱스 값을 증가시키며 첫번째 문자의 아스키 값을 ascValue로 받는다 'Response.write "ascValue : ["& ascValue&"]
" ptr =ptr +1 ascArrayValue = dec64List(ascValue) 'Response.write "ascArrayValue : ["& ascArrayValue&"]
" If ascValue >= 0 And ascValue < 128 And ascArrayValue <> -1 Then if n Mod 4 = 0 Then 'c = ascArrayValue << 2 c = ascArrayValue * 2^2 'Response.write "n : " & n &", c : ["& c &"]
" ElseIf n Mod 4 = 1 Then 'c = c Or ( ascArrayValue >> 4 ) c = c Or ( ascArrayValue / 2^4 ) 'Response.write "n : " & n &", c : ["& c &"]
" 'd = ( ascArrayValue And 0x0000000F ) << 4 d = ( ascArrayValue And &HF ) * 2^4 'Response.write "n : " & n &", d : ["& d &"]
" ElseIf n Mod 4 = 2 Then 'd = d Or ( ascArrayValue >> 2 ) d = d Or ( ascArrayValue /2^2 ) 'Response.write "n : " & n &", d : ["& d &"]
" 'e = ( ascArrayValue And 0x00000003 ) << 6 e = ( ascArrayValue And &H3 ) * 2^6 'Response.write "n : " & n &", e : ["& e &"]
" Else e = e Or ascArrayValue End If n= n+1 if n Mod 4 = 0 Then output = output & CHR(c) &CHR(d) & CHR(e) 'Response.write "n : " & n &"output : ["& output&"]
" End If End If 'x >> n' 은 x / 2^n의 결과와 같다. 우측으로 비트를 n만큼 움직임 'x << n' 은 x * 2^n의 결과와 같다. Do While ubound(input) >= ptr '기존 value를 잘라서 가지고 있는 input 배열의 크기와 ptr이 같아 질때까지 'Response.write ptr &"
" ascValue = Asc(Left(input(ptr),1)) '배열의 ptr 값을 증가시키며 첫번째 문자의 아스키 값을 ascValue로 받는다 : asp ++ 지원을 하지 않아 다음줄에서 ptr 증가 ptr =ptr +1 ascArrayValue = dec64List(ascValue) If ascValue >= 0 And ascValue < 128 And ascArrayValue <> -1 Then if n Mod 4 = 0 Then 'c = ascArrayValue << 2 c = ascArrayValue * 2^2 ElseIf n Mod 4 = 1 Then 'c = c Or ( ascArrayValue >> 4 ) c = c Or ( ascArrayValue / 2^4 ) 'd = ( ascArrayValue And 0x0000000F ) << 4 d = ( ascArrayValue And &HF ) * 2^4 ElseIf n Mod 4 = 2 Then 'd = d Or ( ascArrayValue >> 2 ) d = d Or ( ascArrayValue /2^2 ) 'e = ( ascArrayValue And 0x00000003 ) << 6 e = ( ascArrayValue And &H3 ) * 2^6 Else e = e Or ascArrayValue End If n= n+1 if n Mod 4 = 0 Then output = output & CHR(c) &CHR(d) & CHR(e) 'Response.write "n : " & n &", output : ["& output&"]
" End If End If Loop 'output += (n % 4 == 3) ? String.fromCharCode(c) + String.fromCharCode(d) : ((n % 4 == 2) ? String.fromCharCode(c) : ""); If n Mod 4 =3 Then output = output &CHR(c) & CHR(d) Else If n Mod 4 = 2 Then output = output & CHR(c) Else output = output & "" End If End If base64Decode = output End Function 내가 만듬, 현재 블로그 스크립트 메뉴에 있는 base64 암호화 함수를 복호화 하는 function 이며 자바스크립트 base64Decode(value) 함수를 asp 용으로 바꾼 것임. 비트 연산자가 먹히지 않아서 조금 애먹음 사용 법은 파라미터를 넘기는 페이지에서 스크립트용 base64 암호화를 이용하여 암호화 한후 submit 하면 받는 페이지에서 asp function base64Decode(parameter) 를 이용 하여 복호화 반대로 하는 즉 asp 에서 암호화 -> 자바스크립트 복호화는 나중에 만들어야 할듯 참고할 사항은 스크립트로 암호화시 그 페이지에서 넘어가기 직전 암호화된 아이디가 input 태그에 노출 되므로 (비밀번호는 type이 password라 노출되지 않음) 넘길때 스크립트로 각 값을 hidden 태그에 저장하고 보여지는 input 태그에는 값을 없애는 방법으로 적용함 아.. 자바하고싶다 ㅠㅠㅠㅠ

'프로그래밍 > ASP / .NET' 카테고리의 다른 글

간단한 다운로드 소스  (0) 2014.08.07
asp 에러 노출 코드  (0) 2014.03.05
asp 에서 엑셀로 파일 다운로드 구현하기  (0) 2013.10.08
/****************************************************
base64.js
---------
A JavaScript library for base64 encoding and decoding
by Danny Goodman (http://www.dannyg.com).

Described in "JavaScript and DHTML Cookbook" published by
O'Reilly & Associates. Copyright 2003.

[Inspired by many examples in many programming languages,
but predominantly by Java routines seen in online
course notes by Hamish Taylor at
   http://www.cee.hw.ac.uk/courses/2nq3/4/
The binary data manipulations were very helpful.]

This library is self-initializing when included in an
HTML page and loaded in a JavaScript-enabled browser.
Browser compatibility has been tested back to Netscape 4
and Internet Explorer 5 (Windows and Mac).

Two "public" functions accept one string argument
(the string to convert) and return a string (the converted
output). Because this library is designed only for
client-side encoding and decoding (i.e., no encoded
data is intended for transmission to a server), the
encoding routines here ignore the 76-character line limit
for MIME transmission. See details of encoding scheme
in RFC2045:

http://www.ietf.org/rfc/rfc2045.txt

These routines are being used to encode/decode html
element attribute values, which may not contain an
equals (=) symbol. Thus, we do not allow padding of
uneven block lengths.


To encode a string, invoke:

 var encodedString = base64Encode("stringToEncode");

To decode a string, invoke:

 var plainString = base64Decode("encodedString");

Release History
---------------
v.1.00    07Apr2003    First release

****************************************************/

var enc64List, dec64List;


function initBase64() {
    enc64List = new Array();
    dec64List = new Array();
    var i;
    for (i = 0; i < 26; i++) {
        enc64List[enc64List.length] = String.fromCharCode(65 + i);
    }
    for (i = 0; i < 26; i++) {
        enc64List[enc64List.length] = String.fromCharCode(97 + i);
    }
    for (i = 0; i < 10; i++) {
        enc64List[enc64List.length] = String.fromCharCode(48 + i);
    }
    enc64List[enc64List.length] = "+";
    enc64List[enc64List.length] = "/";
    for (i = 0; i < 128; i++) {
        dec64List[dec64List.length] = -1;
    }
    for (i = 0; i < 64; i++) {
        dec64List[enc64List[i].charCodeAt(0)] = i;
    }
}

function base64Encode(str) {
    var c, d, e, end = 0;
    var u, v, w, x;
    var ptr = -1;
    var input = str.split("");
    var output = "";
    while(end == 0) {
        c = (typeof input[++ptr] != "undefined") ? input[ptr].charCodeAt(0) :
            ((end = 1) ? 0 : 0);
        d = (typeof input[++ptr] != "undefined") ? input[ptr].charCodeAt(0) :
            ((end += 1) ? 0 : 0);
        e = (typeof input[++ptr] != "undefined") ? input[ptr].charCodeAt(0) :
            ((end += 1) ? 0 : 0);
        u = enc64List[c >> 2];
        v = enc64List[(0x00000003 & c) << 4 | d >> 4];
        w = enc64List[(0x0000000F & d) << 2 | e >> 6];
        x = enc64List[e & 0x0000003F];
        if (end >= 1) {x = "=";}
        if (end == 2) {w = "=";}
        if (end < 3) {output += u + v + w + x;}
    }
    var formattedOutput = "";
    var lineLength = 76;
    while (output.length > lineLength) {
     formattedOutput += output.substring(0, lineLength) + "\n";
     output = output.substring(lineLength);
    }
    formattedOutput += output;
    return formattedOutput;
}

function base64Decode(str) {
    var c=0, d=0, e=0, f=0, i=0, n=0;
    var input = str.split(""); //""로 잘라서 input 배열 생성
    var output = "";
    var ptr = 0;
    do {
        f = input[ptr++].charCodeAt(0); //배열의 인덱스 값을 증가시키며 첫번째 문자의 unicode 값을 f로 받는다
        i = dec64List[f];
        if ( f >= 0 && f < 128 && i != -1 ) {
            if ( n % 4 == 0 ) {
                c = i << 2;
            } else if ( n % 4 == 1 ) {
                c = c | ( i >> 4 );
                d = ( i & 0x0000000F ) << 4;
            } else if ( n % 4 == 2 ) {
                d = d | ( i >> 2 );
                e = ( i & 0x00000003 ) << 6;
            } else {
                e = e | i;
            }
            n++;
            if ( n % 4 == 0 ) {
                output += String.fromCharCode(c) + String.fromCharCode(d) + String.fromCharCode(e);
            }
        }
    }
    while (typeof input[ptr] != "undefined");
    output += (n % 4 == 3) ? String.fromCharCode(c) + String.fromCharCode(d) : ((n % 4 == 2) ? String.fromCharCode(c) : "");
    return output;
}
initBase64();
주석다신분이 원작자. 출처는 까묵었음
MSSQL 에서 sp_help "테이블명" 으로 하면 테이블의 정보를 확인할 수 있으나
컬럼의 Comment까지 같이 확인은 안된다.
아래는 테이블의 컬럼Comment를 확인할 수 있는 쿼리이다.
 
SELECT A.TABLE_NAME, 
		C.VALUE AS TABLE_COMMENT,
		A.COLUMN_NAME, A.DATA_TYPE, 
		ISNULL(CAST(A.CHARACTER_MAXIMUM_LENGTH AS VARCHAR),  
				CAST(A.NUMERIC_PRECISION AS VARCHAR) + ',' +
				CAST(A.NUMERIC_SCALE AS VARCHAR)) AS COLUMN_LENGTH,
		A.COLUMN_DEFAULT, A.IS_NULLABLE,
		B.VALUE AS COLUM_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS A LEFT OUTER JOIN
	SYS.EXTENDED_PROPERTIES B
	ON B.major_id = object_id(A.TABLE_NAME) 
	AND A.ORDINAL_POSITION = B.minor_id
	LEFT OUTER JOIN
		(SELECT object_id(objname) AS TABLE_ID,
					VALUE
		FROM ::FN_LISTEXTENDEDPROPERTY
			(NULL, 'User','dbo','table',
				NULL, NULL, NULL)
			) C
	ON object_id(A.TABLE_NAME) = C.TABLE_ID
WHERE A.TABLE_NAME = '테이블명'
ORDER BY A.TABLE_NAME, A.ORDINAL_POSITION 
 

SELECT A.COLUMN_ID,
       A.COLUMN_NAME,
       A.DATA_TYPE,
       CASE WHEN A.DATA_TYPE = 'NUMBER' THEN A.DATA_PRECISION ||','|| A.DATA_SCALE
            WHEN A.DATA_TYPE = 'DATE' THEN '7'
            ELSE TO_CHAR(DATA_LENGTH)
       END DATA_SIZE,
       B.COMMENTS COMMENTS,
       DECODE(D.CONSTRAINT_TYPE, 'P', 'PK') AS KEY_FIELD
FROM ALL_TAB_COLUMNS A INNER JOIN ALL_COL_COMMENTS B
                       ON  A.TABLE_NAME = B.TABLE_NAME
                       AND A.OWNER = B.OWNER
                       AND A.COLUMN_NAME= B.COLUMN_NAME
                     LEFT OUTER JOIN ALL_CONS_COLUMNS C
                       ON A.TABLE_NAME = C.TABLE_NAME
                       AND A.OWNER = C.OWNER
                       AND A.COLUMN_NAME = C.COLUMN_NAME
                       AND C.POSITION IS NOT NULL
                     LEFT OUTER JOIN ALL_CONSTRAINTS D
                       ON  C.TABLE_NAME = D.TABLE_NAME
                       AND C.OWNER = D.OWNER
                       AND C.CONSTRAINT_NAME  = D.CONSTRAINT_NAME
                       AND D.CONSTRAINT_TYPE = 'P'
WHERE A.TABLE_NAME = '테이블명'
ORDER BY A.COLUMN_ID

출처 : http://blog.naver.com/PostView.nhn?blogId=2zerox&logNo=90150539116
[출처] MSSQL 테이블 정보 쿼리(Comment 포함)|작성자 수정이아빠



 SELECT sc.name +'.'+ ta.name TableName
,SUM(pa.rows) RowCnt
FROM sys.tables ta
INNER JOIN sys.partitions pa
ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc
ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
GROUP BY sc.name,ta.name
ORDER BY SUM(pa.rows) DESC


mssql 테이블 목록과 각 테이블의 데이터수 쿼리

추가)
1. 테이블 목록 가져오기
 select distinct table_name from information_schema.columns
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE 1=1
--AND TABLE_TYPE ='VIEW'
AND TABLE_TYPE ='BASE TABLE'
--AND TABLE_NAME NOT LIKE '%TEST%'
AND TABLE_SCHEMA = 'dbo'
ORDER BY TABLE_NAME 
2. 프로시져 목록 가져오기
 select distinct specific_name from INFORMATION_SCHEMA.PARAMETERS

출처:http://blog.sqlauthority.com/2010/09/08/sql-server-find-row-count-in-table-find-largest-table-in-database-part-2/


MSSQL 주석달기


1. 주석추가 (add)

--테이블

EXEC   sp_addextendedproperty 'MS_Description', '테이블설명', 'user', dbo, 'table',테이블명

--컬럼들

EXEC   sp_addextendedproperty 'MS_Description', '컬럼설명', 'user', dbo, 'table', 테이블명, 'column', 컬럼명


 2. 주석수정 (update)

--테이블

EXEC   sp_updateextendedproperty 'MS_Description', '테이블설명', 'user', dbo, 'table',테이블명

--컬럼들

EXEC   sp_updateextendedproperty 'MS_Description', '컬럼설명', 'user', dbo, 'table', 테이블명, 'column', 컬럼명



 ORACLE 주석달기

--테이블에 주석달기

COMMENT ON TABLE 테이블명 IS '주석'

--컬럼에 주석달기

COMMENT ON COLUMN 테이블명.컬럼명 IS '주석'

주석삭제

COMMENT ON COLUMN 테이블명.컬럼명 IS ''


/////////////디코드 수정/////////////////

DECODE(Sport,'Cricket','England','Hockey','India','Base Ball','America') AS 'Originating Country'



CASE Sport
    WHEN 'Cricket' THEN 'England' 
    WHEN 'Hockey' THEN 'India' 
    WHEN 'Base Ball' THEN 'America' 
    ELSE NULL 
END AS 'Originating Country'


///////////////////////////////////////


/////////////TO_CHAR 수정//////////////

TO_CHAR(SYSDATE, 'YYYY-MM-DD')
> CONVERT(VARCHAR(10), GETDATE(), 120)

TO_CHAR(SYSDATE, 'YYYYMMDD')
> CONVERT(VARCHAR, GETDATE(), 112)

TO_CHAR(CON_STRDATE,'YYYY')
>CONVERT(VARCHAR(4),GETDATE(),112)

TO_CHAR(CON_STRDATE,'MM')
>CONVERT(VARCHAR(2),GETDATE(),1)

TO_CHAR(CON_STRDATE,'DD')
>CONVERT(VARCHAR(2),GETDATE(),5)

TO_CHAR(CON_STRDATE,'D')
>DATEPART(W, GETDATE())


/** SYSDATE -> GETDATE()

///////////////////////////////////////



///////////TO_DATE 수정///////////////

TO_DATE('2008-01-01','YYYY-MM-DD')

CONVERT(DATETIME,'2008-01-01')




TO_DATE('20080101','YYYYMMDD')

CONVERT(DATETIME,'20080101')

//////////////////////////////////////



/////////////////날짜 - 날짜/////////////

TO_DATE('20081210','YYYYMMDD') - TO_DATE('20081110','YYYYMMDD')


DATEDIFF(DD,CONVERT(DATETIME,'20081110'),CONVERT(DATETIME,'20081210'))

/////////////////////////////////////////




//////////////// 999,999,999 포멧지정///////////////
TO_CHAR(999999999,'fm999,999,999')

REPLACE(CONVERT(VARCHAR,CONVERT(MONEY,999999999),1),'.00','')

///////////////////////////////////////////////////


///////////////////// ROWNUM ///////////////////////////////

ROWNUM

ROW_NUMBER() OVER(ORDER BY '정렬기준 컬럼')

///////////////////////////////////////////////////////////



/////////////////// || 를 + 로 변경할것//////////////////


////////////////// NVL -> ISNULL ////////////////////////


////////////////// LENGTH -> LEN ////////////////////////

////////////////// SUBSTR -> SUBSTRING ////////////////////////

//////////////// INSERT안에 서브쿼리가 들어가있는 경우//////////////
INSERT INTO TEST(COUNT) VALUES(SELECT COUNT(*) FROM TEST)
-> 
DECLARE @COUNT INT;
SELECT @COUNT = COUNT(*) FROM TEST
INSERT INTO TEST(COUNT) VALUES(@COUNT)


/////////////// LPAD(RPAD) 처리 ///////////////////////////////
SELECT LPAD('31',5,'0')
-> REPLICATE('0',5 - LEN('31')) + '31'


////////////////////// CONNECT BY ////////////////////////////
WITH 사용하여 마소를 욕하며 변환

///////////////////// (+)를 이용한 JOIN /////////////////////////
무조건 표준 JOIN문을 이용해 변환 =* 사용시 호환성문제와 조인된 테이블을 참조할 수 없음



페이지를 만들다 보니 자꾸 IE에서 호환성 보기로 변한다.해결 방법들이다.

기타잡다한 얘기IE8 Compatibility with X-UA-Compatible

아파치 적용
Implementing the META Switch on Apache

실제 페이지에서 meta 태그로 넣는 예
META Tags and Locking in Future Compatibility


자세한 설명은 아래 링크에 있음.
HTTP-EQUIV Attribute | httpEquiv Property


IE9’s Document Modes and JavaScript

무조건 해당 IE버젼으로 보여준다.






이건 IE9를 최신으로 하되 실패시 ie5모드로 변환





가장최신버젼




 출처 : http://makeme.egloos.com/3606397

<input type="text" style="ime-mode:active" />


스타일부분에 ime-mode:active 추가하여 윈도우 언어를 사용 하게 한다?!  윕표준에 걸릴지도 모름

 ie 에서만 적용 가능 한 듯함

엑셀 출력 페이지의 최상단부에 다음 코드를 추가합니다.
 
<%
' 여기서 엑셀 파일명 지정
filename = "test"

Response.Buffer = TRUE
Response.ContentType = "application/vnd.ms-excel"

Response.AddHeader "Content-disposition","attachment;filename=" & filename & ".xls"
%>
 
위 코드 하단부에는 엑셀로 출력하기 원하는 데이터를 테이블 형태로 그려지게 합니다.
테이블 형태라는 것은 말 그대로 <TABLE> 태그를 사용하라는 것입니다.
 
완성된 위 페이지를 웹브라우저로 읽으면 브라우저가 엑셀 파일로 인식하게 됩니다.
 
실무에서 엑셀 출력 버튼을 클릭하면 새창을 띄워서 위 페이지를 출력하거나, 안보이는 IFRAME-x을 미리 준비해뒀다가 그 IFRAME-x에서 위 페이지로 이동하는 방식으로 사용하시면 됩니다.
===================================================================================
페이지 결과를 엑셀파일로 저장하고 싶을때...
페이지 상단에 아래와 같은 코드를 넣으면 됩니다.
 
즉 웹브라우져에게 ContentType 를 엑셀이라고 알려주면 저장하거나 바로 웹브라우져에서 엑셀을 보여주거나
사용자의 설정에 따라 다르게 보여줄겁니다.
 
 Response.Buffer = False
 Response.Expires=0
 
 FileName = "저장될 파일이름" 

 Response.AddHeader "Content-Disposition","attachment;filename=" & server.URLPathEncode(FileName) & ".xls" '한글 인코딩 깨지지 않게 보존
 Response.ContentType = "application/vnd.ms-excel"  '''= 엑셀로 출력
 Response.CacheControl = "public"
 
그외
 
엑셀 : application/vnd.ms-excel
워드 : application/vnd.ms-word
파워포인트 : application/vnd.ms-powerpoint
 
 
덧 : Response.Buffer = False 와 Response.CacheControl = "public" 의 역할은 데이터를 버퍼링 하지 않고
바로 다운로드 창이 떠서 저장하기를 누르면 그때 데이터를 받아오도록 하는 기능입니다.


출처 : http://l2j.co.kr/1205

'프로그래밍 > ASP / .NET' 카테고리의 다른 글

간단한 다운로드 소스  (0) 2014.08.07
asp 에러 노출 코드  (0) 2014.03.05
base64 자바스크립트 암호화, asp 복호화  (2) 2014.03.05

구글맵을 파라미터로 띄워주고 싶었으나

 웹접근성에 걸리므로 구글맵스로 링크로 대체 하였다

 그때 넘기는 파라미터에 따라 나타내줄수 있는것들 많이 있어 일부 정리함


http://maps.google.co.kr/maps?

--General--

&q=(카테고리)  

&near=(주소)   

&g=(내 위치정보 저장 관련인듯) 


-- Search Mode --

&mrt= (검색옵션 보기 )

       =all (모든 검색결과)

       =loc (위치정보)

       =yp(업체)

       =websearch(??)

       =realestae(부동산??)

       =ds(사용자 제작 콘텐츠??)


--  Location --

&ll=(??)

&sll=(??)

&spn=(??)

&latlng=(??)

&cid=(??)

&geocode=(??)

&radious=(왼쪽패널에 표시되는 검색범위)


-- Map Display --

&t= (맵 종류)

    =m(지도)

    =k(위성)

    =h(혼합)

    =p(지형)

    =e(구글어스) 

&z= (줌 레벨 설정(범위1-20)) 

&layer= (건물사진 위키피아 등등 )

&lci=com.panoramio.all Photos (from Panoromio) 

      =com.youtube.all Videos (from YouTube)

      =org.wikipedia.en Wikipedia (English) 

      =com.google.ugc.c752d13e87c4fbd7 Webcams (from Webcams.travel) 

     =transit Transit 

      =bike Bike Routes 

  e.g. lci=com.panoramio.all,org.wikipedia.en for Photos and Wikipedia English. 

&view= (view=text???  view=map????).

-- Directions --

&saddr= (출발지). 

&daddr= (목적지)

&mra ?? what does mean this route parameter? known possible values=dm, dpe, cc, ls, ... 

&mrcr ?? what does mean this route parameter? known possible values=0 

&mrsp (

          =0 Switches on resolving street names from coordinates.

          =1 Switches off resolving street names from coordinates.

&mrad= (목적지 추가). 

          If you've got three points in your trip you can use saddr=, daddr= and mrad= instead of "+to:" clauses.

&dirflg (경로). 

         =h Switches on "Avoid Highways" route finding mode. 

         =t Switches on "Avoid Tolls" route finding mode. 

         =r Switches on "Public Transit" - only works in some areas. 

         =w Switches to walking directions - still in beta. 

         =b Switches to biking directions - only works in some areas and still in beta.

&via= Comma separated list of intermediate addresses for directions, that should be 'via points'. In the example via=1,3addresses 1 and 3 will be via points without their own entry in the sidebar. The start (0), the 2nd intermediate (2) and the end (4) will be full addresses.

&doflg= Distance Units. (Defaults to preval‍ent units in country of origin.) 

          =ks ??

          =ptk Outputs directions in metric (km). 

          =ptm Outputs directions in imperial (miles). 


--  Street View --

&cbll= Latitude,longitude for Street View. 

&cbp= Street View window that accepts 5 parameters:

Street View/map arrangement, 11=upper half Street View and lower half map, 12=mostly Street View with corner map

Rotation angle/bearing (in degrees)

Tilt angle, -90 (straight up) to 90 (straight down)

Zoom level, 0-2

Pitch (in degrees) -90 (straight up) to 90 (straight down), default 5

&panoid= Panorama ID. The ID of the current nearby panorama object. Panorama objects ids are used in the little arrows you can click on in Street View to move you to the next object/property. Eg panoid=eTnPNGoy4bxR9LpjjfFuOw 


-- Output Control  --

&hl= (??)

&om= (오른쪽 아래 오버뷰맵). 

&ie= (입력 인코딩) e.g. ie=UTF8

&oe= (출력 인코딩) e.g. oe=UTF8. 

&output= 출력 포멧

&output=html

&output=js Outputs xxJavaScript object literals and function calls used by Google Maps, including encoded polyline data for driving directions, and stage information in HTML format. 

&output=kml ( 검색결과 10를 kml화일로 저장. )

&output=mobile(맵, 이미지 등 생략).  

&output=nl Outputs a small KML file containing a NetworkLink wrapper linking to a URL from which Google Earth and Google Maps can obtain the information (only known to work with MyMaps). 

&output=embed Outputs HTML suitable for embedding in third party sites, only works with the presence of the encrypted s= param, presumably to stop arbitrary content being included. 

&output=dragdir returns a JSON object that contains the reverse geocode and a an encoded polyline for a given saddr (start point of the route) and daddr (endpoint of the route) 

&output=georss (Geo)RSS output for the current map - probably only MyMaps 

&f= Controls the style of query form to be displayed. 

&f=d Displays the "directions" form (two input boxes: from, to). 

&f=l Displays the "local" form (two input boxes: what, where). 

&f=q (or no parameter) The default search form is displayed (single input). 

&pw= Activates print mode and initiates printing. There seems to be a problem at the moment with pw=1, but using settings like pw=2 is OK. 

&v= When output=kml is selected specifies the kml version. Defaults to 2.0. Version 2.2 can be specified: v=2.2.


출처 : http://cluster1.cafe.daum.net/_c21_/bbs_search_read?grpid=1KoKA&fldid=hMei&datanum=43&contentval=&docid=1KoKAhMei4320101021162518


첨부파일 : 

map.htm




출처 : http://zero-gravity.tistory.com/154


   ↓ <head>와 </head>사이에 넣는다.

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!-- GoogoleMap Asynchronously Loading the API ********************************************* -->
<script type="text/javascript">


      function initialize() {
        var mapLocation = new google.maps.LatLng('36.322473', '127.412501'); // 지도에서 가운데로 위치할 위도와 경도
        var markLocation = new google.maps.LatLng('36.322473', '127.412501'); // 마커가 위치할 위도와 경도
         
        var mapOptions = {
          center: mapLocation, // 지도에서 가운데로 위치할 위도와 경도(변수)
          zoom: 18, // 지도 zoom단계
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map-canvas"), // id: map-canvas, body에 있는 div태그의 id와 같아야 함
            mapOptions);
         
        var size_x = 60; // 마커로 사용할 이미지의 가로 크기
        var size_y = 60; // 마커로 사용할 이미지의 세로 크기
         
        // 마커로 사용할 이미지 주소
        var image = new google.maps.MarkerImage( 'http://www.larva.re.kr/home/img/boximage3.png',
                            new google.maps.Size(size_x, size_y),
                            '',
                            '',
                            new google.maps.Size(size_x, size_y));
         
        var marker;
        marker = new google.maps.Marker({
               position: markLocation, // 마커가 위치할 위도와 경도(변수)
               map: map,
               icon: image, // 마커로 사용할 이미지(변수)
//             info: '말풍선 안에 들어갈 내용',
               title: '서대전네거리역이지롱~' // 마커에 마우스 포인트를 갖다댔을 때 뜨는 타이틀
        });
         
        var content = "이곳은 서대전네거리역이다! <br/> 지하철 타러 가자~"; // 말풍선 안에 들어갈 내용
         
        // 마커를 클릭했을 때의 이벤트. 말풍선 뿅~
        var infowindow = new google.maps.InfoWindow({ content: content});
 
        google.maps.event.addListener(marker, "click", function() {
            infowindow.open(map,marker);
        });
         
 
         
      }
      google.maps.event.addDomListener(window, 'load', initialize);
</script>



//위치 검색하기


  위치를 검색할 때, 위도와 경도로 찾게 되면 항상 미국 구글맵에 들어가서 위치를 검색한 다음에 위도와 경도를 알아내서 직접 기입해야 하는 수밖에 없는데... 이번 글에서는 그런 불편을 없애기 위해 위도/경도가 아닌 주소로 바로 검색하는 방법을 사용하려 한다.


   이 방법을 찾게 된 이유는 DB에 있는 수 십개의 업체들을 웹상에 지도로 표시해야 하는데 위도/경도 컬럼을 만들어서 일일히 업데이트 하는 게 지옥이었기 때문이다. 그래서 주소 컬럼을 이용해서 업체의 주소를 가져와 바로 검색할 수 있는 방법을 찾게 됐다. 구글맵API에서는 이걸 지오코딩이라고 부른다.


   전에도 말했지만 방법은 어렵지 않다.





※ 참고한 곳 

https://developers.google.com/maps/documentation/javascript/geocoding?hl=ko

https://developers.google.com/maps/documentation/javascript/examples/geocoding-simple?hl=ko


   참고했던 사이트를 보면, 구글에서는 주소 검색을 사용자가 직접 입력해 검색하는 방식으로 예제를 보여주는데, 아래 내가 한 방식은 미리 주소를 코딩해놓는 방식이다.





먼저 html doctype을 <!DOCTYPE html>로 변경해준 다음,

head 부분에

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>

추가해준다.


그리고..

↓ head에 삽입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!-- GoogoleMap Asynchronously Loading the API ********************************************* -->
<script type="text/javascript">
    function initialize() {
     
        var mapOptions = {
                            zoom: 18, // 지도를 띄웠을 때의 줌 크기
                            mapTypeId: google.maps.MapTypeId.ROADMAP
                        };
         
         
        var map = new google.maps.Map(document.getElementById("map-canvas"), // div의 id과 값이 같아야 함. "map-canvas"
                                    mapOptions);
         
        var size_x = 40; // 마커로 사용할 이미지의 가로 크기
        var size_y = 40; // 마커로 사용할 이미지의 세로 크기
     
        // 마커로 사용할 이미지 주소
        var image = new google.maps.MarkerImage( '주소 여기에 기입!',
                                                    new google.maps.Size(size_x, size_y),
                                                    '',
                                                    '',
                                                    new google.maps.Size(size_x, size_y));
         
        // Geocoding *****************************************************
        var address = '대전광역시 중구 한밭도서관길 222'; // DB에서 주소 가져와서 검색하거나 왼쪽과 같이 주소를 바로 코딩.
        var marker = null;
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                marker = new google.maps.Marker({
                                map: map,
                                icon: image, // 마커로 사용할 이미지(변수)
                                title: '한밭도서관', // 마커에 마우스 포인트를 갖다댔을 때 뜨는 타이틀
                                position: results[0].geometry.location
                            });
 
                var content = "한밭도서관<br/><br/>Tel: 042-580-4114"; // 말풍선 안에 들어갈 내용
             
                // 마커를 클릭했을 때의 이벤트. 말풍선 뿅~
                var infowindow = new google.maps.InfoWindow({ content: content});
                google.maps.event.addListener(marker, "click", function() {infowindow.open(map,marker);});
            } else {
                alert("Geocode was not successful for the following reason: " + status);
            }
        });
        // Geocoding // *****************************************************
         
    }
    google.maps.event.addDomListener(window, 'load', initialize);
</script>



↓body 안에 삽입

1
<div id="map-canvas" style="width: 100%; height: 340px" title="도서관 위치입니다."></div>


끝~!



출처 : http://blog.naver.com/jiho3400?Redirect=Log&logNo=10174180497


오늘은 구글 지도에 관해서 간단히 정리해 봤습니다.

google map v3 로 바뀌고 부터는 키 정보 필요없이 구글 지도 정보를 사용하는게 가능해졌는데요..

빙맵이나 다른 경쟁사와 비교해봐도 컨텐츠를 비롯해서 사용방법, 정보의 규모면등등 현존 쵝오 인듯 하네요...^^

 

그럼 구글 맵 간단히 시작하는 방법을 알아보겠습니다.

 

위의 이미지와 같은 지도를 만들어 보겠습니다.

먼저 google api 를 참조해서 넣어야겠죠. 단 당연한 말이겠지만 인터넷이 사용가능한 환경에서만 개발이 가능합니다..^^

먼저 head테그 내에 아래의 자바스크립트를 삽입합니다.

   1: <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>

이걸 삽입하면 이제 구글 지도 개발을 커스터마이징 하는게 가능합니다.

그럼 다음으로 자바스크립트를 적어보겠습니다.

   1: <script>
   2: var map;
   3: function initialize() {
   4:   var mapOptions = {
   5:     // 줌을 적용
   6:     zoom: 8,
   7:     // 지도의 중심지점을 설정
   8:     center: new google.maps.LatLng(-34.397, 150.644),
   9:     // 지도의 타입 설정
  10:     mapTypeId: google.maps.MapTypeId.ROADMAP
  11:   };
  12:   map = new google.maps.Map(document.getElementById('map-canvas'),
  13:       mapOptions);
  14: }
  15:  
  16: google.maps.event.addDomListener(window, 'load', initialize);
  17:  
  18:     </script>

이 자바스크립트를 위의 api바로 밑에 삽입합니다.

 

그리고 html에 타겟영역을 만들어주면 끝입니다.

 

   1: <div style="width:600px; height:400px;" id="map-canvas"></div>

지도를 삽입하고 싶은 html영역에 위 코드를 넣으면 끝입니다.

일단 크기는 600 * 400으로 넣었습니다만 원하시는 크기로 바꾸면 지도의 크기가 결정됩니다.

 

어때요? 참 쉽죠^^

 

그럼 시간날때 조금더 응용법을 올려보도록 하겠습니다.

아래는 여기까지의 완성된 소스 입니다.

   1: <!DOCTYPE html>
   2: <html>
   3:   <head>
   4:     <title>Simple Map</title>
   5:     <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
   6:     <meta charset="utf-8">
   7:     <style>
   8:       html, body, #map-canvas {
   9:         margin: 0;
  10:         padding: 0;
  11:         height: 100%;
  12:       }
  13:     </style>
  14:     <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white">   1:  </pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4">   2:     <script></pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white">   3: var map;</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4">   4: function initialize() {</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white">   5:   var mapOptions = {</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4">   6:     zoom: 8,</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white">   7:     center: new google.maps.LatLng(-34.397, 150.644),</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4">   8:     mapTypeId: google.maps.MapTypeId.ROADMAP</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white">   9:   };</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4">  10:   map = new google.maps.Map(document.getElementById('map-canvas'),</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white">  11:       mapOptions);</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4">  12: }</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white">  13:  </pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4">  14: google.maps.event.addDomListener(window, 'load', initialize);</pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white">  15:  </pre><pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4">  16:     </pre></script>
  15:   </head>
  16:   <body>
  17:     <div style="width:600px; height:400px;" id="map-canvas"></div>
  18:   </body>
  19: </html>

 



출처 : http://blog.naver.com/patrickson?Redirect=Log&logNo=90153182047


윈도우 스케줄러에 특정 URL을 호출하는 작업을 등록하고 싶다.

안타깝게도 윈도우 스케줄러 등록시에는 특정 url을 입력해주는 부분이 없다.

 

그럴때 메모장에 아래와 같이 작성을 한 다음 확장자를 vbs로 지정한다음 그 파일을

원하는 시간에 호출하도록 처리를 해주면 되겠다.

===========================================================================

Call LogEntry()

Sub LogEntry()

        'Force the script to finish on an error.

        On Error Resume Next

        'Declare variables

        Dim objRequest

        Dim URL

        Set objRequest = CreateObject("Microsoft.XMLHTTP")

        'Put together the URL link appending the Variables.

        URL = http://적용할 url

        'Open the HTTP request and pass the URL to the objRequest object

        objRequest.open "POST", URL , false

        'Send the HTML Request

        objRequest.Send

        'Set the object to nothing

        Set objRequest = Nothing

End Sub


===========================================================================


지금 작업은 해놨으나 작동은 되는지 확인해야함...


+ Recent posts