UPDATE TableA
     SET TableA.컬럼A = TableB.컬럼A
    FROM TableB
   WHERE TableA.PK = TableB.PK 
     AND TableA.컬럼A <> TableB.컬럼A 
;

'DBMS > 오라클기타' 카테고리의 다른 글

다중update  (0) 2015.06.08
인덱스  (0) 2015.01.21
TYPE 오브젝트  (0) 2015.01.21
오라클 행을 열로  (0) 2014.12.17
다중 update  (0) 2014.12.17
2개 이상의 테이블을 조인하여 table1의 특정 컬럼을 table2 의 특정 컬럼의 값으로 업데이트는 아래와 같은 형식을 취한다.

[일반적인 업데이트의 경우]
UPDATE table
SET A = 'F'
WHERE B = 'T'

[다중행 업데이트의 경우]
UPDATE  /*+ bypass_ujvc */
( 조인된 select 쿼리가 위치하는 곳 )
SET A = A'

아래 예제는 table2 의 id 별로 enddate 컬럼의 max 값을 찾아 비어져있는 table1 의 enddt 컬럼에 업데이트하는 경우이다.

[예제]

UPDATE /*+ bypassujvc */

(SELECT a.end
dt end1, REPLACE(b.enddate, '-', '') end2
FROM table1 a, (
SELECT id, Max(end
date) enddate
FROM table2
GROUP BY id
) b
WHERE a.id = b.id
AND a.end
dt is null
AND b.end_date > '2014-03-22'
)

SET end1 = end2



TistoryM에서 작성됨

'DBMS > 오라클기타' 카테고리의 다른 글

두 테이블간 update  (0) 2015.07.20
인덱스  (0) 2015.01.21
TYPE 오브젝트  (0) 2015.01.21
오라클 행을 열로  (0) 2014.12.17
다중 update  (0) 2014.12.17

 

 

 

< DBConnection.java >

 

package test.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
 public static Connection getCon() throws SQLException{
  Connection con=null;
  try{
   Class.forName("oracle.jdbc.OracleDriver");
   String url="jdbc:oracle:thin:@localhost:1521:XE";
   con= DriverManager.getConnection(url,"SCOTT","TIGER");
   return con;
  }catch(ClassNotFoundException ce){
   System.out.println(ce.getMessage());
   return null;
  }
 }
}

 

1. 초기화면

 

2. 1을 등록하면 바로 옆에 검증 후 메시지 보여줌.

 3. 2을 등록하면 가능하다고 보여줌.

 

4. 관련 테이블 데이터

 

; 데이터로 ID 1이 들어가 있음.

 

 

< insert.html  >

 

<!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>Insert title here</title>
<style type="text/css">
 #idcheck{
  color:red;
  font-size:10pt;
 }
</style>
<script type="text/javascript">
 var xhr=null;
 
 function getXHR(){
  if(window.XMLHttpRequest){
   //IE 7.0이상,Chrome,Firefox,Safari,....
   return new XMLHttpRequest();
  }else{
   //IE 하위버젼(6.0이하)
   return new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
 
 function idCheck(){
  xhr=getXHR();
  xhr.onreadystatechange=getResult;
  var id=document.getElementById("id").value;
  xhr.open("get","idcheck.jsp?id="+id,true);
  xhr.send(null);
 }
 
 function getResult(){
  if(xhr.readyState==4 && xhr.status==200){
   var xml=xhr.responseXML;
   var re=xml.getElementsByTagName("result")[0].firstChild.nodeValue;
   
   if(re=='true'){
    //span에 결과 출력하기
    document.getElementById("idcheck").innerHTML="이미 사용중인 아이디 입니다.";
   }else{
    document.getElementById("idcheck").innerHTML="사용가능한 아이디 입니다.";
   }
  }
 }
</script>
</head>
<body>
<h3>회원가입</h3>
<form method="post" action="insert.jsp">
 아이디 <input type="text" name="id" id="id" onkeyup="idCheck()"/>
 <!-- <input type="button" value="중복확인" onclick="idCheck()"/>  -->
 <span id="idcheck"></span>
 <br/>
 비밀번호 <input type="password" name="pwd"/><br/>
 이메일<input type="text" name="email"/><br/>
 <input type="submit" value="회원가입"/>
</form>
</body>
</html>

 

 

< idcheck.jsp >

 

<%@page import="java.io.PrintWriter"%>
<%@page import="java.sql.SQLException"%>
<%@page import="test.db.DBConnection"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
 //1.사용자가 입력한 아이디 얻어오기
 String id=request.getParameter("id");
 //2.해당아이디가 존재하는지 검사
 Connection con=null;
 PreparedStatement pstmt=null;
 ResultSet rs=null;
 boolean result=false;
 try{
  con=DBConnection.getCon();
  String sql="select * from members where id=?";
  pstmt=con.prepareStatement(sql);
  pstmt.setString(1, id);
  rs=pstmt.executeQuery();
  if(rs.next()){
   result=true;
  }
 }catch(SQLException se){
  System.out.println(se.getMessage());
  
 }finally{
  rs.close();
  pstmt.close();
  con.close();
 }
 
 ////////// 3.xml로 결과 응답하기 ///////////
 response.setContentType("text/xml;charset=euc-kr");
 PrintWriter pw=response.getWriter();
 pw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
 pw.println("<data>");
 pw.println("<result>" + result + "</result>");
 pw.println("</data>");
 pw.close();
 
%>

 

 

 

 

 

 

 

 

 

 

 

'WEB > Ajax Json' 카테고리의 다른 글

AJAX #08 JSON  (0) 2013.05.04
AJAX #07 JSON  (0) 2013.05.04
AJAX #06 JSON 관련 jar, javascript파일  (0) 2013.05.04
AJAX #05 JSON  (0) 2013.05.04
AJAX #04 댓글 달기 예제  (1) 2013.05.04







'내가 본영화' 카테고리의 다른 글

it boy(2013)  (0) 2014.10.12
월터의 상상은 현실이된다  (0) 2014.02.08
플립(flipped)  (0) 2014.01.29
화이  (0) 2014.01.29
어바웃 타임  (0) 2014.01.29


구분자>







식별자 >

상수, 변수, 예외, 커서, 커서 변수, 하위 프로그램 및 패키지를 포함하여 PL/SQL 프로그램 항목과 단위 이름을 지정하는데 사용


예)

X

t2

phone#

credit_limit

LastName

oracle$number


식별자는 한 문자나 여러 문자, 숫자, 달러 기호($), 밑줄, 번호 기호( # )로 구성됩니다. 

다음 예와 같이 하이픈, 슬래시, 공백과 같은 다른 문자는 허용되지 않습니다.


mine&yours             -- illegal ampersand

debit-amount          -- illegal hyphen

on/off                 -- illegal slash

user id                -- illegal space



다음 예와 같이 달러 기호, 밑줄 및 번호 기호를 중간과 끝에 사용할 수 있습니다.


money$$$tree

SN##

try_again_



대문자, 소문자 또는 대소문자를 모두 사용하여 식별자를 작성할 수 있습니다. PL/SQL에서는 문자열과 문자 리터럴 안에 사용될 경우 외에는 대소문자를 구분하지 않으므로 다음 예와 같이 대소문자 표기만 다른 식별자는 동일한 것으로 간주합니다.


lastname

LastName   -- same as lastname

LASTNAME  -- same as lastname and LastName



식별자의 길이는 30자를 초과할 수 없습니다.




문자열 리터럴 >


문자 값은 식별자로 표현하거나 문자열 리터럴로 명시적으로 작성될 수 있습니다. 문자열 리터럴은 인접한 0이나 다른 문자를 작은 따옴표로 묶는 것입니다. 

예)

’Hello, world!’

’XYZ Corporation’

’10-NOV-91’

’He said ”Life is like licking honey from a thorn.”’

’$1,000,000’


널 문자열(’’)을 제외한 모든 문자열 리터럴은 CHAR 데이터 유형입니다. 작은 따옴표(’)는 문자열 리터럴의 구분자로 사용되며 문자열 안에 작은 따옴표를 표시하는 방법은 다음 예와 같이 작은 따옴표 두 개를 사용하여 나타냅니다. 


’Don’’t leave without saving your work.’


PL/SQL 문자열 리터럴에서는 대소문자를 구분합니다. 예를 들어, 다음 두 리터럴은 서로 다른 것으로 간주됩니다.

’baker’

’Baker’




Boolean 리터럴 >


Boolean 리터럴은 미리 정의된 값인 TRUE, FALSE, NULL 을 의미합니다. (NULL은 빠진 값, 알 수 없는 값 또는 적용할 수 없는 값을 나타냅니다.) Boolean 리터럴은 문자열이 아닌 값이라는 점에 주의.

예를 들어, TRUE는 숫자 25와 마찬가지로 하나의 값입니다.






주석 >

단일 행 : --

복수   : /*    */




내장 데이터 유형 >




1. 숫자 유형


1) BINARY_INTEGER

- 부호가 붙은 정수를 저장합니다. BINARY_INTEGER 데이터 유형의 크기 범위는 - 2147483647 . .2147483647입니다.


2) NUMBER

- 실제로 임의 크기의 고정 또는 부동 소수점 숫자를 저장합니다.

NUMBER[(precision,scale)]

   ; 자리수의 총 개수를 나타내는 전체 자리수와 소수점의 오른쪽에 있는 자리수를 나타내는 소수점 이하 자리수를 지정 

소수점이 없는 정수를 선언하려면 다음 형식을 사용합니다.

   NUMBER(precision)    -- same as NUMBER(precision,0)



3) PLS_INTEGER

- 부호가 붙은 정수를 저장하려면 P L S I N T E G E R 데이터 유형을 사용합니다. PLS_INTEGER 데이터 유형의 크기 범위는 -2147483647 . . 2147483647입니다.




2. 문자 유형

1) CHAR

- CHAR 데이터 유형을 사용하여 고정 길이의 문자 데이터를 저장합니다.

- 최대 길이 32767바이트까지 지정

   CHAR[(maximum_length)]

- 주의 할 점은 최대 길이는 문자가 아니라 바이트로 지정한다는 점


2) LONG과 LONG RAW

- LONG 데이터 유형은 가변 길이 문자열을 저장하는데 사용됩니다.

- LONG RAW 데이터 유형은 이진 데이터나 바이트 문자열을 저장하는데 사용됩니다.

- LONG 열에는 텍스트, 문자 배열 또는 짧은 문서까지 저장할 수 있습니다. UPDATE ,INSERT 및 (대부분의) SELECT 문에서는 LONG 열을 참조할 수 있지만 표현식, SQL함수 호출 또는 WHERE, GROUP B Y 및 CONNECT BY 와 같은 특정 SQL 절에서는 LONG열을 참조할 수 없습니다.


3) RAW

- 이진 데이터나 바이트 문자열을 저장합니다. 예를 들어,RAW 변수는 그래픽 문자나 디지털화된 그림을 저장할 수 있습니다.

- RAW(maximum_length)



4) ROWID와 UROWID

- 모든 데이터베이스 테이블에는 ROW I D라는 이진 값을 저장하는 ROWID 의사 열이 있습니다. 각 ROWID는 행의 저장 영역 주소를 나타냅니다. 물리적 ROWID는 일반 테이블의 한 행을 나타내고 논리적 ROWID는 인덱스 구성 테이블의 한 행을 나타냅니다.

- 형식은 네 부분으로 구성됩니다.

 OOOOOOFFFBBBBBBRRR 

■ O O O O O O : 데이터베이스 세그먼트를 식별하는 데이터 객체 번호. 테이블 클러스터와 같은 세그먼트에 있는 스키마 객체는 동일한 데이터 객체 번호를 갖습니다.

■ F F F : 행이 포함된 데이터 파일을 식별하는 파일 번호. 각 파일 번호는 데이터베이스 내에서는 고유합니다.

■ B B B B B B : 행이 포함된 데이터 블록을 식별하는 블록 번호. 블록 번호는 테이블스페이스가 아닌 데이터 파일과 관련되어 있으므로 두 행이 동일한 테이블스페이스에 있으나 서로 다른 데이터 파일에 있는 경우 블록 번호가 동일할 수 있습니다.

■ RRR: 블록 내의 행을 식별하는 행 번호 



5) VARCHAR2

- 가변 길이의 문자 데이터를 저장합니다. 데이터가 내부적으로 표시되는 방법은 데이터베이스 문자 집합에 따라 다릅니다.



3. NLS 문자 유형


1) NCHAR

- NCHAR 데이터 유형을 사용하여 고정 길이(필요한 경우 공백을 채워 넣음)의 NLS 문자 데이터를 저장합니다.

최대 길이 32767바이트까지 지정할 수 있는 선택 매개변수를 가집니다. NCHAR 데이터 유형의 구문은 다음과 같습니다.

   NCHAR[(maximum_length)]


2) NVARCHAR2

- 가변 길이의 NLS 문자데이터를 저장하려면 NVARCHAR2 데이터 유형을 사용합니다.

- 최대 길이 32767바이트까지 지정할 수 있는 필수 매개변수를 가지며 구문은 다음과 같습니다.

   NVARCHAR2(maximum_length)




4. LOB 유형

L O B( Large Objects) 데이터 유형인 BFILE, BLOB, CLOB 및 NCLOB는 텍스트, 그래픽 이미지, 비디오 클립 및 사운드 웨이브폼 등 구조화되지 않은 데이터 블록을 최대 4 GB까지 저장하며 효율적이고, 임의적이며, 세분화된 데이터 액세스가 가능합니다.

LOB 유형은 데이터에 대한 임의적 액세스를 지원하지만 L O N G은 순차적 액세스만 지원합니다.


1) BFILE

- BFILE 데이터 유형은 데이터베이스 외부의 운영 체제 파일에 대형 이진 객체를 저장하는데 사용됩니다.

읽기 전용이므로 수정할 수 없습니다.

- 크기는 시스템에 따라 다르지만 4 G B ( 2 * * 3 2 -1바이트)를 초과할 수 없습니다.

B F I L E은 트랜잭션에서는 사용되지 않고 복구가 불가능하며 복제될 수 없습니다.

- 열수 있는 최대 BFILE 수는 시스템에 따라 Oracle 초기화 매개변수 SESSION_MAX_OPEN_FILES에 의해 설정됩니다.


2) BLOB

- BLOB 데이터 유형은 데이터베이스 행 안이나 밖에 있는 대형 이진 객체를 저장하는데 사용됩니다. 모든 BLOB 변수는 대형 이진 객체를 가리키는 로케이터를 저장합니다.

- BLOB의 최대 크기는 4 G B입니다.

- 트랜잭션에 사용되며 복구와 복제가 가능합니다.


3) CLOB

- CLOB 데이터 유형은 행 안이나 행 밖에서 데이터베이스에 있는 싱글 바이트 문자 데이터의 대형 블록을 저장하는데 사용됩니다.

- CLOB의 최대 크기는 4 G B입니다.

- 트랜잭션에 사용되며 복구와 복제가 가능합니다.


4) NCLOB

- NCLOB 데이터 유형은 행 안이나 행 밖에서 데이터베이스에 있는 여러 바이트의 NCHAR 데이터 대형 블록을 저장하는데 사용됩니다. 고정 너비와 가변 너비의 문자 집합이 모두 지원됩니다. 모든 NCLOB 변수는 NCHAR 데이터 대형 블록을 가리키는 로케이터를 저장합니다. 

- NCLOB의 최대 크기는 4 G B입니다.

- NCLOB는 트랜잭션에 사용되며 복구와 복제가 가능합니다.



5. 기타 유형


1) BOOLEAN

- BOOLEAN 데이터 유형은 매개변수를 가질 수 없으며 BOOLEAN 변수에는TRUE, FALSE 및 NULL 값만 할당될 수 있습니다.


2) DATE

- 고정된 길이의 날짜/시간 값을 저장하는데 사용됩니다. DATE값에는 자정부터 초 단위 시간이 포함됩니다. 날짜 부분의 기본값은 현재 달의 1일이고 시간 부분의 기본값은 자정입니다.

- 기본 날짜 형식은 Oracle 초기화 매개변수 NLS_DATE_FORMAT에 의해 설정

PL / SQL에서는 산술 표현식에서 정수 리터럴을 일로 해석합니다. 예를 들어, SYSDATE + 1은 내일입니다.




'DBMS > 오라클 PLSQL' 카테고리의 다른 글

1. PL/SQL 개요  (0) 2015.02.11
프로시져 실행 샘플 - OUT 값이 여러행인 경우  (0) 2015.01.21
pl/sql, procedure, function  (0) 2013.01.27

+ Recent posts