'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 |
오라클 디벨로퍼 시퀀스 생성 (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>
결과
오라클 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
오라클에서 커서란
sql문을 실행할 때마다 처리를 위한 메모리를 사용하는데 그것을 커서라고함
(ResultSet이 튜플을 가리키는 커서이듯)
묵시적커서 - 오라클에서 자동으로 만들어지는 변수?
명시적커서 - 사용자가 직접 만들고 관리 사용하는 변수?
오라클 시퀀스 권한주기 (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 테스트
결과값을 화면에 출력하는 기능 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
테이블 타입
바인드 변수
데이터베이스의 내용을 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
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과 비슷하다)
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을 리턴한다
데이터베이스 // 순위 매기기 (0) | 2020.09.10 |
---|---|
spring boot // 트랜잭션 격리수준 (0) | 2020.07.27 |
200416 / 데이터베이스 용어 1 (0) | 2020.04.16 |
null 무결성 : null을 넣으면 안되는 것
참조 무결성 : 외래키 값은 null 이거나 참조 릴레이션의 기본키 값과 동일해야함
기본키 무결성 : 레코드에는 기본키를 하나만 가져야됨
도메인 무결성 : 남 녀 등 제한되어있는 데이터만 가져야함
유니크 무결성 : 중복되지 않은 자료를 넣는 것
200506 (0) | 2020.05.06 |
---|---|
데이터베이스 ALL, SOME (0) | 2020.05.06 |
데이터 베이스 모델링 (0) | 2020.04.24 |
자바 데이터베이스에서 자료 가져오기 (0) | 2020.04.22 |
200409 (0) | 2020.04.09 |