'Database > OracleSQL' 카테고리의 다른 글

오라클 디벨로퍼 시퀀스 생성  (0) 2020.05.15
오라클 CHECK 체크 의미  (1) 2020.05.15
데이터베이스의 내용을 Json으로 변경하여 웹에 띄우기  (0) 2020.05.14
200512  (0) 2020.05.12
200507  (0) 2020.05.07

 

먼저 DB에 테이블을 만들고 내용을 넣자

 

자바에 파일을 먼저 만들어주자

 

내용

 

package db.beans;

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

public class DBConnection {
	public static Connection getConnection() throws Exception {
		System.out.println("DB연결시도");
		Class.forName("oracle.jdbc.driver.OracleDriver");
		return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "c##madang", "c##madang");
	}
	
	public static Connection getConnection(String ip, int port, String db, String user, String pw) throws Exception {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		return DriverManager.getConnection("jdbc:oracle:thin:@" +ip+ ":" +port+ ":" + db, user, pw);
	}
}

 

 

package db.beans;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class QueryBean {
	Connection conn;
	Statement stmt;
	ResultSet rs;
	
	public QueryBean() {
		conn = null;
		stmt = null;
		rs = null;
	}
	
	public void getConnection() {
		try {
			conn = DBConnection.getConnection();
		} catch (Exception e) {
			// TODO: handle exception
		}
		try {
			stmt = conn.createStatement();		
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	public void closeConnection() {
		if(stmt != null) {
			try {
				stmt.close();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
		if(conn != null) {
			try {
				conn.close();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}
	
	public ArrayList<String> getUserInfo() throws Exception{ // 꺽쇠
		
		StringBuffer sb = new StringBuffer();
		
		sb.append(" SELECT ");
		sb.append(" U_ID, U_NAME, U_PHONE, U_GRADE, WRITE_TIME ");
		sb.append(" FROM ");
		sb.append(" USER_INFO_SAMPLE ");
		sb.append(" ORDER BY ");
		sb.append(" WRITE_TIME ");
		
		rs = stmt.executeQuery(sb.toString());
		
		ArrayList<String> res = new ArrayList<>();
		while (rs.next()) {
			res.add(rs.getString(1));
			res.add(rs.getString(2));
			res.add(rs.getString(3));
			res.add(rs.getString(4));
			res.add(rs.getString(5));
		}
		
		System.out.println(sb.toString());
		return res;
	}
}

 

 

<%@page import="java.util.ArrayList"%>
<%@page import="db.beans.QueryBean"%>
<%@ page contentType="text/html; charset=EUC-KR" pageEncoding = "EUC-KR" %>
<jsp:useBean id = "QueryBean" scope="page" class= "db.beans.QueryBean" />
<jsp:setProperty name = "QueryBean" property = "*"/>
<%
	response.setHeader("Cache-Control" , "no-store");
	response.setHeader("Pragma" , "no-cache");
	response.setDateHeader("Expires" , 0);
	
	request.setCharacterEncoding("UTF-8");
	
	QueryBean.getConnection();
	
	ArrayList<String> resArr = new ArrayList<>();
	
	try
	{
		resArr = QueryBean.getUserInfo();
	}
	catch(Exception e )
	{
		out.print(e.toString());
	}
	finally
	{
		QueryBean.closeConnection();
	}
	out.println("{");
	out.println("\"datas\":[");
	
	if(resArr.size() == 0)
	{
		out.println("]");
		out.println("}");
	}else
	
	{
	out.print("{");
	out.print("\"ID\":\"" +         (String)resArr.get(0) + "\", ");
	out.print("\"NAME\":\"" +         (String)resArr.get(1) + "\", ");
	out.print("\"PHONE\":\"" +         (String)resArr.get(2) + "\", ");
	out.print("\"GRADE\":\"" +         (String)resArr.get(3) + "\", ");
	out.print("\"WRITE_TIME\":\"" +         (String)resArr.get(4) + "\"");
	out.print("} ");
	for(int i =5; i <resArr.size(); i+=5)
	{
		out.print(",");
		out.print("{");
		out.print("   \"ID\": \""    + (String)resArr.get(i) + "\" ,");
		out.print("   \"NAME\": \""    + (String)resArr.get(i+1) + "\" ,");
		out.print("   \"PHONE\": \""    + (String)resArr.get(i+2) + "\" ,");
		out.print("   \"GRADE\": \""    + (String)resArr.get(i+3) + "\" ,");
		out.print("   \"WRITE_TIME\": \""    + (String)resArr.get(i+4) + "\"");
		
		
		out.print("}");
	}
	out.print("]");
	out.print("}");
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

 

결과

 

'Database > OracleSQL' 카테고리의 다른 글

오라클 CHECK 체크 의미  (1) 2020.05.15
오라클 시퀀스 권한주기  (0) 2020.05.15
200512  (0) 2020.05.12
200507  (0) 2020.05.07
200506  (0) 2020.05.06

TYPE변수를 이용하여 데이터 초기화 하기

CREATE TABLE pl_emp3
as
SELECT empno, ename, sal
FROM emp;

먼저 연습을 위해 다른테이블을 복사한다

 

SET serveroutput ON;

출력을 위해 위 코드를 실행

 

DECLARE
     vno pl_emp3.empno%TYPE;
     vname pl_emp3.ename%TYPE;
     vsal pl_emp3.sal%TYPE;
BEGIN
    SELECT empno, ename, sal INTO vno, vname, vsal
    FROM pl_emp3
    WHERE empno = 7369;
    DBMS_OUTPUT.PUT_LINE(vno||'---'||vname||'---'||vsal);
END;
/

변수를 선언하고 나온 값들을 변수에 넣고 출력한다.

 

위의 코드를 ROWTYPE방식으로 만들어본다

SET serveroutput ON
DECLARE
 vrow pl_emp3%ROWTYPE;
BEGIN
    SELECT * INTO vrow
    FROM pl_emp3
    WHERE empno = 7369;
    DBMS_OUTPUT.PUT_LINE(vrow.empno);
END;
/EMP

 

오라클 반복문 참고

https://coding-factory.tistory.com/452

 

[Oracle] 오라클 반복문 (LOOP, WHILE, FOR)문 사용법 (PL/SQL)

다른언어와 마찬가지로 PL/SQL에서도 반복문을 지원합니다. PL/SQL에서의 반복문 종류는 LOOP문, WHILE문, FOR문이 있습니다. LOOP문 --사용법 LOOP 처리문; EXIT[조건]; END LOOP; --예제 DECLARE NUM1 NUMBER :=..

coding-factory.tistory.com

 

 

오라클에서 커서란

sql문을 실행할 때마다 처리를 위한 메모리를 사용하는데 그것을 커서라고함

(ResultSet이 튜플을 가리키는 커서이듯)

묵시적커서 - 오라클에서 자동으로 만들어지는 변수?

명시적커서 - 사용자가 직접 만들고 관리 사용하는 변수?

 

 

 

 

 

 

 

 

'Database > OracleSQL' 카테고리의 다른 글

오라클 시퀀스 권한주기  (0) 2020.05.15
데이터베이스의 내용을 Json으로 변경하여 웹에 띄우기  (0) 2020.05.14
200507  (0) 2020.05.07
200506  (0) 2020.05.06
데이터베이스 ALL, SOME  (0) 2020.05.06

MERGE : 위아래 병합

TRUNCATE : 잘라내기

ROLLBACK : 취소

----------------------------

트랜잭션 - 의미 있는 단위로 작업을 나누는 것

-----------------------------

-----------------------------

 

테이블을 복사하여 가져오기 (AS)

CREATE TABLE DEPT6
AS
SELECT DCODE, DNAME
FROM DEPT2
WHERE DCODE IN(1000,1001,1002);

 

테이블에 속성 추가하기

ALTER TABLE DEPT6
ADD (LOCATION VARCHAR2(10));

 

LOCATION2 속성을 추가하면서 기본값을 SEOUL로 만들기

ALTER TABLE DEPT6
ADD (LOCATION2 VARCHAR2(10) DEFAULT 'SEOUL');

 

LOCATION2 속성이름을 LOC로 만들기

ALTER TABLE DEPT6 RENAME COLUMN LOCATION2 TO LOC;

 

테이블 이름 변경

RENAME DEPT6 TO DEPT7;

 

테이블 내용 잘라내기

TRUNCATE TABLE DEPT7;

 

------------------

세션 - 클라이언트가 서버에 접속 되어 있는 상태

임시테이블 - 같은 계정으로 접속 되어도 세션이 다르면 보이지 않는 임시적으로 만든 테이블

------------------

-- 4. 참조되어지는 테이블을 CASCADE CONSTRAINTS 옵션을 통해 삭제한다. 

SQL> DROP TABLE department CASCADE CONSTRAINTS;

 

------------------

임시테이블

 

테이블 복사

 

테이블 컬럼만 가져오기

 

------------------

PL/SQL

오라클 전용 프로그램 랭귀지

선언부 DECLARE/ 실행부 BEGIN/ 예외처리부 EXCEPTION로 나뉜다

 

테스트 테이블 생성

CREATE TABLE PL_TEST
(NO NUMBER,
NAME VARCHAR2(10));

 

테스트 시퀀스 생성

CREATE SEQUENCE PL_SEQ;

 

프로시저랭귀지 SQL 실행

BEGIN
    INSERT INTO PL_TEST
    VALUES(PL_SEQ.NEXTVAL,'AAA');
END;
/

 

PLSQL을 한번 더 실행하면

---------------------------------------

 

PLSQL 테스트

test_data_eng.sql
0.03MB

 

결과값을 화면에 출력하는 기능 ON

SET SERVEROUTPUT ON;

 

 

SET SERVEROUTPUT ON;

DECLARE
    V_EMPID EMP.EMPNO%TYPE;
    V_SALARY EMP.SAL%TYPE;
BEGIN
    SELECT EMPNO, SAL INTO V_EMPID, V_SALARY
    FROM EMP
    WHERE EMPNO = 7369;
    
    DBMS_OUTPUT.PUT_LINE(V_EMPID|| ' == ' ||V_SALARY);
END;
/

 

 

DECLARE
    V_EMPID EMP.EMPNO%TYPE;
    V_SALARY EMP.SAL%TYPE;
BEGIN
    SELECT EMPNO, SAL INTO V_EMPID, V_SALARY
    FROM EMP
    WHERE EMPNO = &EMPNO;
    
    DBMS_OUTPUT.PUT_LINE(V_EMPID|| ' == ' ||V_SALARY);
END;
/

 

 

CREATE TABLE PL_TEST2
(NO NUMBER,
NAME VARCHAR2(10),
ADDR VARCHAR2(10));

SET VERIFY OFF -- 유효성체크 출력여부
DECLARE
    V_NO NUMBER := '&NO';
    V_NAME VARCHAR2(10) := '&NAME';
    V_ADDR VARCHAR2(10) := '&ADDR';
BEGIN
    INSERT INTO PL_TEST2
    VALUES(V_NO, V_NAME, V_ADDR);
END;
/

------------------------------

 

 

레코드 타입 record

테이블 타입

바인드 변수

 

 

'Database > OracleSQL' 카테고리의 다른 글

데이터베이스의 내용을 Json으로 변경하여 웹에 띄우기  (0) 2020.05.14
200512  (0) 2020.05.12
200506  (0) 2020.05.06
데이터베이스 ALL, SOME  (0) 2020.05.06
데이터베이스 무결성  (0) 2020.04.27

1. null
2. ""
3. ''
4. 0

-------------

오라클에서는 " " 과 ' ' 둘다 허용한다.

String은 특수함

----------

오라클에서는 값을 담아주지 않으면 null이 들어간다. (C나 자바에서는 쓰레기 값 등이 들어간다)

------------

null은 값이 아니기 때문에 +100 등을 해줘도 null이 된다.

----------

count는 값이 없어도 0으로 나온다?

-----------

NVL은 자주씀

----------

스칼라 - 값 (대각선으로 500미터 앞) 

벡터 - x y z 값

----------

인라인뷰 (FROM 부속쿼리)는 무조건 비상관쿼리다

스칼라부속질의 - 단일값을 반환한다. 상관 비상관 둘다가능

where질의 - 상관 비상관 구분

-----------

성능평가는 직접해야한다.

-----------

view를 만드는 이유

- 공개할 정보 선정 (컬럼, 튜플 등 개수 조정)
- 수정이 용이 (뷰를 수정하면 테이블도 수정되기 때문)
- select등 검색속도 향상 (100만개의 테이블을 10만개씩 나누어서 검색하는 등)

----------

뷰를 수정할 때에는 alter 가 아니라 replace를 사용해야한다

뷰를 생성 (또는 이미 있다면 수정)

-------------------------------

index

정렬된 데이터 중에 눈에 보이지 않는 번호를 index라고 이해하자 

-------------

복합인덱스를 사용할경우

처음에 많이 걸러줄 수 있는 조건을 거는 것이 좋다

---------------

index 주의사항

index는 select이외의 insert update delete가 느리다 

delete시 index데이터는 지워지지 않는다

update시 delete + lnsert 현상이 발생한다

예를들어 "가나라" 가있는데 "다" 가 들어가면 " 가나다라"순으로 정렬해야하니 정렬하는 시간이 걸린다는 뜻

 

index rebuild 는

insert나 delete등으로 순서가 빈 index들을 재정렬 해주는 것이다.

(서버 점검시에 수동으로 하는 경우가 많다.)

 

order by는 느리고 아래 방식으로 index로 정렬하면 빠르다

(역정렬도 체크해보자)

 

http://www.gurubee.net/lecture/2927

 

인덱스의 핵심인 ROWID 이해

인덱스의 핵심 중 하나는 ROWID다. ROWID는 데이터베이스 내 데이터 공유의 주소로, 이를 통해 데이터에 접근할 수 있어 DBA라면 반드시 이해해야..

www.gurubee.net

 

 

 

 

 

 

'Database > OracleSQL' 카테고리의 다른 글

200512  (0) 2020.05.12
200507  (0) 2020.05.07
데이터베이스 ALL, SOME  (0) 2020.05.06
데이터베이스 무결성  (0) 2020.04.27
데이터 베이스 모델링  (0) 2020.04.24
SELECT
    orderid, saleprice
FROM orders
WHERE saleprice > ALL(SELECT saleprice
                        FROM orders
                        WHERE custid='3');

ALL은 부속질의에 나온 값 모든 것들을 말한다

위의 코드에서는 모든 값들보다 큰 값을 걸러내는 것( and와 비슷 )

 

SELECT
    orderid, saleprice
FROM orders
WHERE saleprice > SOME(SELECT saleprice
                        FROM orders
                        WHERE custid='3');

 

SOME은 부속질의에 나온 값 중 하나의 조건만 만족해도 되는 것을 말한다(or과 비슷하다)

 

 

 

 

 

 

 

 

'Database > OracleSQL' 카테고리의 다른 글

200507  (0) 2020.05.07
200506  (0) 2020.05.06
데이터베이스 무결성  (0) 2020.04.27
데이터 베이스 모델링  (0) 2020.04.24
자바 데이터베이스에서 자료 가져오기  (0) 2020.04.22

데이터베이스는 데이터를 JSON이 아니라 ResultSet타입으로 리턴해준다

ResultSet은 레퍼런스 주소(결과가 아닌 결과를 가리키는 커서)를 리턴해준다. 

 

최근 빅데이터관련 NoSQL 등은 JSON을 리턴한다

 

'Database' 카테고리의 다른 글

데이터베이스 // 순위 매기기  (0) 2020.09.10
spring boot // 트랜잭션 격리수준  (0) 2020.07.27
200416 / 데이터베이스 용어 1  (0) 2020.04.16

null 무결성 : null을 넣으면 안되는 것

참조 무결성 : 외래키 값은 null 이거나 참조 릴레이션의 기본키 값과 동일해야함

기본키 무결성 : 레코드에는 기본키를 하나만 가져야됨

도메인 무결성 : 남 녀 등 제한되어있는 데이터만 가져야함

유니크 무결성 : 중복되지 않은 자료를 넣는 것

'Database > OracleSQL' 카테고리의 다른 글

200506  (0) 2020.05.06
데이터베이스 ALL, SOME  (0) 2020.05.06
데이터 베이스 모델링  (0) 2020.04.24
자바 데이터베이스에서 자료 가져오기  (0) 2020.04.22
200409  (0) 2020.04.09

+ Recent posts