두 테이블간 update
다중update
[일반적인 업데이트의 경우]
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.enddt end1, REPLACE(b.enddate, '-', '') end2
FROM table1 a, (
SELECT id, Max(enddate) enddate
FROM table2
GROUP BY id
) b
WHERE a.id = b.id
AND a.enddt is null
AND b.end_date > '2014-03-22'
)
SET end1 = end2
TistoryM에서 작성됨
아이디 중복 체크하기 예제
< 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 |
세인트 빈센트(2015)
'내가 본영화' 카테고리의 다른 글
it boy(2013) (0) | 2014.10.12 |
---|---|
월터의 상상은 현실이된다 (0) | 2014.02.08 |
플립(flipped) (0) | 2014.01.29 |
화이 (0) | 2014.01.29 |
어바웃 타임 (0) | 2014.01.29 |
2. 기본
구분자>
식별자 >
상수, 변수, 예외, 커서, 커서 변수, 하위 프로그램 및 패키지를 포함하여 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 |