달력

42024  이전 다음

  • 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

DB를 오라클을 사용시 DB 툴은 보통

Oracle SQL Developer 나 DBeaver 를 쓰는데

쿼리 실행 하다가 먹통 되서 강종을 할경우에

쿼리가 날라가버릴때 사용하면 좋음

 

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

SELECT
     MODULE AS PROGRAM_NM /* 실행 프로그램 */
    ,PARSING_SCHEMA_NAME AS USER_ID /* 접속 계정 */
    ,FIRST_LOAD_TIME AS LOAD_TIME /* 실행 시간 */
    ,SQL_FULLTEXT AS SQLTEXT /* 쿼리 */
FROM V$SQL 
WHERE MODULE like '%%' --'SQL Developer'
ORDER BY FIRST_LOAD_TIME DESC 

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

 

아래는 PROGRAM_NM  프로그램 실행명으로 찾을때 나온 항목들

각 프로젝트마다 사용하는 툴이 다르니 프로그램 명이나 버전등을 체크해서 

like 검색을 해주면 좋음~

 

DBeaver 6.3.0 - Main
DBeaver 6.3.0 - Metadata
DBeaver 7.1.0 - Main
DBeaver 7.1.0 - SQLEditor
DBeaver 7.1.2 - Metadata
DBeaver 7.1.2 - SQLEditor
DBeaver 7.1.3 - Main
DBeaver 7.1.3 - SQLEditor
DBeaver 7.1.3 - View sessions
QueryOne Client 2.1.8.24

SQL Developer
SQLGate 9.9.5.0

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

oracle LISTAGG 사용하기  (0) 2016.04.28
oracle 초성검색 function(mssql function 수정)  (0) 2016.04.19
세션 킬(Session Kill)  (0) 2015.02.24
패키지 생성 암호화 CRYPTO  (0) 2015.02.24
oracle 외부접속  (0) 2015.02.24
Posted by 타카스 류지
|

서비스 에서 MySQL 정지


CMD 창은 두개


1번창

C:\Program Files\MariaDB 10.2\bin\mysqld.exe --skip-grant


2번창

C:\Program Files\MariaDB 10.2\bin\mysqld.exe --skip-grant --explicit_defaults_for_timestamp


C:\Program Files\MariaDB 10.2\bin\mysql




mysql> use mysql


Database changed


mysql> update user set password=password('black') where user='root';


mysql> flush privileges;


CMD 창 두개는 종료


작업관리자에서 mysql 강제종료 후


서비스 에서 MySQL 시작


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

Mysql 초성 검색 function(mssql function수정)  (0) 2016.04.15
MYSQL 접속 프로그램  (0) 2016.02.24
MYSQL DB 덤프 방법  (0) 2010.12.07
Posted by 타카스 류지
|

자주 쓰는거

 

SELECT   a.c1,
         LISTAGG (a.c2, ',') WITHIN GROUP (ORDER BY a.c2) AS c2
    FROM t1 a
GROUP BY a.c1;

 

 

 

 

 

LISTAGG 함수가 도입되기 전에 동일 기능을 구현하기 위해 다양한 기법들이 사용되었다. 정리해보자.

 

아래와 같이 데이터를 생성하자.

CREATE TABLE t1 (c1 NUMBER(1), c2 VARCHAR2(2));

INSERT INTO t1 VALUES (1, '01');
INSERT INTO t1 VALUES (2, '02');
INSERT INTO t1 VALUES (2, '03');
INSERT INTO t1 VALUES (3, '04');
INSERT INTO t1 VALUES (3, '04');
INSERT INTO t1 VALUES (3, '05');
INSERT INTO t1 VALUES (3, '06');

 

① 11g를 사용한다면 LISTAGG 함수를 사용하면 된다. 집계함수(1번)와 분석함수(2번) 형태로 사용이 가능하다.

-- 1
SELECT   a.c1,
         LISTAGG (a.c2, ',') WITHIN GROUP (ORDER BY a.c2) AS c2
    FROM t1 a
GROUP BY a.c1;

 C1 C2          
--- ------------
  1 01          
  2 02,03       
  3 04,04,05,06 

3 rows selected.

-- 2
SELECT a.c1,
       LISTAGG (a.c2, ',') WITHIN GROUP (ORDER BY a.c2) OVER (PARTITION BY A.c1) AS c2
  FROM t1 a;

 C1 C2          
--- ------------
  1 01          
  2 02,03       
  2 02,03       
  3 04,04,05,06 
  3 04,04,05,06 
  3 04,04,05,06 
  3 04,04,05,06 

7 rows selected.

 

② WM_CONCAT 함수는 WMSYS 유저가 내부적으로 사용한다. (SQL Reference에 없다...--;) LISTAGG보다 성능은 떨어지지만 추가 기능(DISTINCT 구문, 분석함수 누적, KEEP 절)을 지원한다. 4번 방식을 이용하면 정렬도 가능하다. 

-- 1
SELECT   a.c1,
         wmsys.wm_concat (a.c2) AS c2
    FROM t1 a
GROUP BY a.c1;

 C1 C2          
--- ------------
  1 01          
  2 02,03       
  3 04,06,05,04 

3 rows selected.

-- 2
SELECT   a.c1,
         wmsys.wm_concat (DISTINCT a.c2) AS c2
    FROM t1 a
GROUP BY a.c1;

 C1 C2          
--- ------------
  1 01          
  2 02,03       
  3 04,05,06    

3 rows selected.

-- 3
SELECT a.c1,
       wmsys.wm_concat (a.c2) OVER (ORDER BY a.c2) AS c2
  FROM t1 a;

 C1 C2                    
--- ----------------------
  1 01                    
  2 01,02                 
  2 01,02,03              
  3 01,02,03,04,04        
  3 01,02,03,04,04        
  3 01,02,03,04,04,05     
  3 01,02,03,04,04,05,06  

7 rows selected.

-- 4
SELECT   a.c1,
         MAX (CAST (a.c2 AS VARCHAR2 (4000))) as c2
    FROM (SELECT a.c1,
                 wmsys.wm_concat (a.c2) OVER (PARTITION BY a.c1 ORDER BY a.c2) AS c2
            FROM t1 a) a
GROUP BY a.c1;

 C1 C2          
--- ------------
  1 01          
  2 02,03       
  3 04,04,05,06 

3 rows selected.

-- 5
SELECT   a.c1,
         wmsys.wm_concat (a.c2) KEEP (DENSE_RANK FIRST ORDER BY a.c2) AS c2
    FROM t1 a
GROUP BY a.c1;

 C1 C2          
--- ------------
  1 01          
  2 02          
  3 04,04       

3 rows selected.

 

③ 10g에서는 XMLAGG 함수를 사용해도 된다. 

SELECT   a.c1,
         SUBSTR (XMLAGG (XMLELEMENT (a, ',', a.c2) ORDER BY a.c2).EXTRACT ('//text()'), 2) AS c2
    FROM t1 a
GROUP BY a.c1;

 C1 C2          
--- ------------
  1 01          
  2 02,03       
  3 04,04,05,06 

3 rows selected.

 

④ 후임자를 괴롭히고 싶다면 MODEL 절을 사용해도 된다...--;

SELECT   a.c1,
         RTRIM (a.c2, ',') as c2
    FROM (SELECT c1,
                 c2,
                 rn
            FROM t1 a
           MODEL PARTITION BY (a.c1)
                 DIMENSION BY (ROW_NUMBER() OVER (PARTITION BY a.c1 ORDER BY a.c2) AS rn)
                 MEASURES (CAST (a.c2 AS VARCHAR2(4000)) AS c2)
                 RULES (c2[ANY] ORDER BY rn DESC = c2[CV()] || ',' || c2[CV()+1])) a
   WHERE a.rn = 1
ORDER BY a.c1;

 C1 C2          
--- ------------
  1 01          
  2 02,03       
  3 04,04,05,06 

3 rows selected.

 

⑤ 9i에서는 전통적 방식인 ROW_NUMBER와 SYS_CONNECT_BY_PATH 조합을 사용하면 된다. 

SELECT     a.c1,
           SUBSTR (MAX (SYS_CONNECT_BY_PATH (a.c2, ',')), 2) AS c2
      FROM (SELECT a.c1,
                   a.c2,
                   ROW_NUMBER () OVER (PARTITION BY a.c1 ORDER BY a.c2) AS rn
              FROM t1 a) a
START WITH a.rn = 1
CONNECT BY a.c1 = PRIOR a.c1
       AND a.rn - 1 = PRIOR a.rn
  GROUP BY a.c1
  ORDER BY a.c1;

 C1 C2          
--- ------------
  1 01          
  2 02,03       
  3 04,04,05,06 

3 rows selected.

출처 : http://tyboss.tistory.com/entry/Oracle-XMLAGG-LISTAGG-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

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

ORACLE - 최근 실행 쿼리 확인하기  (0) 2020.07.30
oracle 초성검색 function(mssql function 수정)  (0) 2016.04.19
세션 킬(Session Kill)  (0) 2015.02.24
패키지 생성 암호화 CRYPTO  (0) 2015.02.24
oracle 외부접속  (0) 2015.02.24
Posted by 타카스 류지
|

MSSQL 쿼리를 MYSQL 로 만들어 수정해보았고 이걸 다시 ORACLE 용으로 변경해보았다..

 

좋네..ㅎ

 

 

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

 

오라클 초성 검색 펑션

 

 

CREATE OR REPLACE
FUNCTION FN_GET_CHOSUNG (STR IN  VARCHAR2)
RETURN VARCHAR2 IS
/******************************************************************************
   NAME        : FN_GET_CHOSUNG
   STR         : 홍길동
   RETURN      : ㅎㄱㄷ
******************************************************************************/

I INT;
J INT;
TMPSTR VARCHAR2(255);
COL1 VARCHAR2(2);

BEGIN
 I := LENGTH(STR);
 J := 1;
 TMPSTR := '';

 WHILE J <= I LOOP
  COL1 := SUBSTR(STR, J, 1);
  TMPSTR := TMPSTR ||
    (
      CASE WHEN COL1 < 'ㄱ' THEN COL1 
      WHEN ascii('ㄱ') <= ascii(COL1) and 
         ascii(COL1)<= ascii('ㅎ') THEN COL1 
      WHEN COL1 < '까' THEN 'ㄱ'
      WHEN COL1 < '나' THEN 'ㄲ'
      WHEN COL1 < '다' THEN 'ㄴ'
      WHEN COL1 < '따' THEN 'ㄷ'
      WHEN COL1 < '라' THEN 'ㄸ'
      WHEN COL1 < '마' THEN 'ㄹ'
      WHEN COL1 < '바' THEN 'ㅁ'
      WHEN COL1 < '빠' THEN 'ㅂ'
      WHEN COL1 < '사' THEN 'ㅃ'
      WHEN COL1 < '싸' THEN 'ㅅ'
      WHEN COL1 < '아' THEN 'ㅆ'
      WHEN COL1 < '자' THEN 'ㅇ'
      WHEN COL1 < '짜' THEN 'ㅈ'
      WHEN COL1 < '차' THEN 'ㅉ'
      WHEN COL1 < '카' THEN 'ㅊ'
      WHEN COL1 < '타' THEN 'ㅋ'
      WHEN COL1 < '파' THEN 'ㅌ'
      WHEN COL1 < '하' THEN 'ㅍ'
      ELSE 'ㅎ'
      END
   );
  J := J + 1;
 END LOOP;

 RETURN TMPSTR;
END;
----------------------------------------------------------------------------

 

 

MYSQL

 

CREATE FUNCTION `chosung`(STR VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
    DETERMINISTIC
BEGIN
 DECLARE I INT;
 DECLARE J INT;
 DECLARE TMPSTR VARCHAR(255);
 DECLARE COL1 VARCHAR(2);

 SET I = char_length(STR);
 SET J = 1;
 SET TMPSTR = '';
  WHILE J <=I  DO
    SET COL1 = SUBSTRING(STR, J, 1);
  SET TMPSTR = CONCAT(TMPSTR,(
                       CASE WHEN COL1 < 'ㄱ' THEN COL1 
                       WHEN ascii('ㄱ') <= ascii(COL1) and 
                              ascii(COL1)<= ascii('ㅎ') THEN COL1 
                       WHEN COL1 < '까' THEN 'ㄱ'
                       WHEN COL1 < '나' THEN 'ㄲ'
                       WHEN COL1 < '다' THEN 'ㄴ'
                       WHEN COL1 < '따' THEN 'ㄷ'
                       WHEN COL1 < '라' THEN 'ㄸ'
                       WHEN COL1 < '마' THEN 'ㄹ'
                       WHEN COL1 < '바' THEN 'ㅁ'
                       WHEN COL1 < '빠' THEN 'ㅂ'
                       WHEN COL1 < '사' THEN 'ㅃ'
                       WHEN COL1 < '싸' THEN 'ㅅ'
                       WHEN COL1 < '아' THEN 'ㅆ'
                       WHEN COL1 < '자' THEN 'ㅇ'
                       WHEN COL1 < '짜' THEN 'ㅈ'
                       WHEN COL1 < '차' THEN 'ㅉ'
                       WHEN COL1 < '카' THEN 'ㅊ'
                       WHEN COL1 < '타' THEN 'ㅋ'
                       WHEN COL1 < '파' THEN 'ㅌ'
                       WHEN COL1 < '하' THEN 'ㅍ'
                       WHEN COL1 <= '힣' THEN 'ㅎ'
                       ELSE COL1
                       END
         ));
      SET J = J + 1 ;
  END WHILE;
  RETURN TMPSTR;
END

 

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

 

 

 

 

 

MYSQL : http://cjbox.tistory.com/111

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

ORACLE - 최근 실행 쿼리 확인하기  (0) 2020.07.30
oracle LISTAGG 사용하기  (0) 2016.04.28
세션 킬(Session Kill)  (0) 2015.02.24
패키지 생성 암호화 CRYPTO  (0) 2015.02.24
oracle 외부접속  (0) 2015.02.24
Posted by 타카스 류지
|

네비게이션 검색을 보면 초성 검색을 하는것을 보고 자료를 찾아보던 중 mssql 로 만든 펑션을 보고 mysql 버전으로 수정하였다.

 

검색시 like 로 검색을 하면은 참 용이하게 쓸거같다.

 

쿼리 : select chosung("메인보드(atx)")

 

결과 : ㅁㅇㅂㄷ(atx)

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

MYSQL

 

CREATE FUNCTION `chosung`(STR VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
    DETERMINISTIC
BEGIN
 DECLARE I INT;
 DECLARE J INT;
 DECLARE TMPSTR VARCHAR(255);
 DECLARE COL1 VARCHAR(2);

 SET I = char_length(STR);
 SET J = 1;
 SET TMPSTR = '';
  WHILE J <=I  DO
    SET COL1 = SUBSTRING(STR, J, 1);
  SET TMPSTR = CONCAT(TMPSTR,(
                       CASE WHEN COL1 < 'ㄱ' THEN COL1 
                       WHEN ascii('ㄱ') <= ascii(COL1) and 
                              ascii(COL1)<= ascii('ㅎ') THEN COL1 
                       WHEN COL1 < '까' THEN 'ㄱ'
                       WHEN COL1 < '나' THEN 'ㄲ'
                       WHEN COL1 < '다' THEN 'ㄴ'
                       WHEN COL1 < '따' THEN 'ㄷ'
                       WHEN COL1 < '라' THEN 'ㄸ'
                       WHEN COL1 < '마' THEN 'ㄹ'
                       WHEN COL1 < '바' THEN 'ㅁ'
                       WHEN COL1 < '빠' THEN 'ㅂ'
                       WHEN COL1 < '사' THEN 'ㅃ'
                       WHEN COL1 < '싸' THEN 'ㅅ'
                       WHEN COL1 < '아' THEN 'ㅆ'
                       WHEN COL1 < '자' THEN 'ㅇ'
                       WHEN COL1 < '짜' THEN 'ㅈ'
                       WHEN COL1 < '차' THEN 'ㅉ'
                       WHEN COL1 < '카' THEN 'ㅊ'
                       WHEN COL1 < '타' THEN 'ㅋ'
                       WHEN COL1 < '파' THEN 'ㅌ'
                       WHEN COL1 < '하' THEN 'ㅍ'
                       WHEN COL1 <= '힣' THEN 'ㅎ'
                       ELSE COL1
                       END
         ));
      SET J = J + 1 ;
  END WHILE;
  RETURN TMPSTR;
END

 

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

 

MSSQL 원본

 

-- 한글인 경우, 자음 추출

-- 한글이 아닌 경우 그대로 출력

CREATE FUNCTION Parse_Str(@STR VARCHAR(255))

RETURNS VARCHAR(255)

AS

BEGIN

 

DECLARE @I INT, @J INT, @TMPSTR VARCHAR(255), @COL1 VARCHAR(2)

SET @I = LEN(@STR)

 

SET @J = 1

SET @TMPSTR = ''

 

        WHILE (@J<=@I)

        BEGIN

               SELECT @COL1 = SUBSTRING(@STR, @J, 1)               

       

               SET @TMPSTR = @TMPSTR +

                       CASE WHEN @COL1 < '' THEN @COL1

                       WHEN ascii('') <= ascii(@COL1) and

                              ascii(@COL1)<= ascii('') THEN @COL1

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 < '' THEN ''

                       WHEN @COL1 <= '' THEN ''

                       ELSE  @COL1

                       END

       

               SET @J = @J + 1

       

        END

RETURN(@TMPSTR)

END

GO

 

 

 

CREATE TABLE [good_table] (

  [good_cd]  [varchar] (13)  COLLATE Korean_Wansung_CI_AS NOT NULL ,

  [good_knm] [varchar] (100)  COLLATE Korean_Wansung_CI_AS NULL,

  [good_knm_sep] varchar(255) NULL -- 자음 추출한 데이터가 저장

 ) ON [PRIMARY]

GO

 

CREATE INDEX IDX__knm_sep ON good_table(good_knm_sep)

GO

 

CREATE TRIGGER TRG_GOOD_TABLE

ON GOOD_TABLE

FOR INSERT, UPDATE

AS

BEGIN

        UPDATE A

        SET good_knm_sep = dbo.Parse_Str(B.good_knm)

        FROM good_table A JOIN Inserted B ON A.good_cd = B.good_cd

END

GO

 

 

--)  '삼성파브' 입력시

INSERT GOOD_TABLE(good_cd, good_knm) VALUES ('12345','삼성파브')

GO

 

SELECT * FROM GOOD_TABLE

/*

good_cd         good_knm       good_knm_sep

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

12345          삼성파브        ㅅㅅㅍㅂ

 

(1 적용됨)

*/

 

 

 

 

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

mysql root 패스워드 분실시  (0) 2019.02.22
MYSQL 접속 프로그램  (0) 2016.02.24
MYSQL DB 덤프 방법  (0) 2010.12.07
Posted by 타카스 류지
|

주로 쓰는 프로그램 가벼워서 좋다.

 

HeidiSQL_9.2_Portable.zip

 

HeidiSQL_9.3_Portable.zip

 

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

mysql root 패스워드 분실시  (0) 2019.02.22
Mysql 초성 검색 function(mssql function수정)  (0) 2016.04.15
MYSQL DB 덤프 방법  (0) 2010.12.07
Posted by 타카스 류지
|

사용하다보면은 쿼리를 날렸을때 데이터가 많아서 세션을 계속 물고있는경우가 있다 이럴경우에

 


select
    oracle_username || ' (' || s.osuser || ')' username
  , s.sid || ',' || s.serial# sid_serial
  , owner || '.' || object_name object
  , object_type
  , decode( l.block
          ,0, 'Not Blocking'
          ,1, 'Blocking'
          ,2, 'Global') status
          ,decode(v.locked_mode
            ,0, 'None'
            ,1, 'Null'
            ,2, 'Row-S (SS)'
            ,3, 'Row-X (SX)'
            ,4, 'Share'
            ,5, 'S/Row-X (SSX)'
            ,6, 'Exclusive', TO_CHAR(lmode)) mode_held
from v$locked_object v
    ,dba_objects d
    ,v$lock l
    ,v$session s
where v.object_id = d.object_id
and   v.object_id = l.id1
and   v.session_id = s.sid
order by oracle_username,session_id



위 주문으로 sid 랑 serial 을 가지고 아래 구문으로 실행하면은 세션이 죽는다.

 

alter system kill session 'sid,serial';


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

oracle LISTAGG 사용하기  (0) 2016.04.28
oracle 초성검색 function(mssql function 수정)  (0) 2016.04.19
패키지 생성 암호화 CRYPTO  (0) 2015.02.24
oracle 외부접속  (0) 2015.02.24
where절에 if문처럼 and조건 사용하기  (1) 2015.02.24
Posted by 타카스 류지
|
GRANT EXECUTE ON DBMS_CRYPTO TO [계정명];
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO [계정명];
 
//암호화
SELECT PKG_CRYPTO.ENCRYPT('TEST_PASS') FROM DUAL;
//복호화
SELECT PKG_CRYPTO.DECRYPT('51C6B8ABD615F6F097659BF9E75C353C') FROM DUAL;
/***헤더***/
CREATE OR REPLACE PACKAGE PKG_CRYPTO
 IS
 /******************************************************************************
  암호화
 ******************************************************************************/
 FUNCTION ENCRYPT(V_INPUT_STRING IN VARCHAR2,
                  V_KEY IN VARCHAR2 := 'KHJAVA301$') --> 비밀키 초기값 선언
 RETURN RAW; --> RAW : 원시데이터타입. 알아볼 수 없도록 하기 위해서
 /******************************************************************************
  복호화
 ******************************************************************************/
 FUNCTION DECRYPT(V_INPUT_STRING IN VARCHAR2, --> 암호화되어진 문자 그대로 넣어줌
                  V_KEY IN VARCHAR2 := 'KHJAVA301$') --> 복호화할 비밀키
 RETURN VARCHAR2;
 END PKG_CRYPTO;
 
/***바디***/
CREATE OR REPLACE PACKAGE BODY PKG_CRYPTO
 IS
  V_KEY_RAW RAW(64);
  /******************************************************************************
  암호화
 ******************************************************************************/
  FUNCTION ENCRYPT(V_INPUT_STRING IN VARCHAR2,
                  V_KEY IN VARCHAR2 := 'KHJAVA301$') --> 비밀키 초기값 선언
  RETURN RAW
  IS
  V_ORIGINAL_RAW RAW(64);
  V_ENCRYPTED_RAW RAW(64);
  
  BEGIN
   V_ORIGINAL_RAW := UTL_I18N.STRING_TO_RAW(V_INPUT_STRING,'AL32UTF8'); --> 문자열을 RAW 타입으로 바꿔 줌
   V_KEY_RAW      := UTL_I18N.STRING_TO_RAW(V_KEY, 'AL32UTF8');
   
   V_ENCRYPTED_RAW := DBMS_CRYPTO.ENCRYPT(SRC => V_ORIGINAL_RAW
                                         ,TYP => DBMS_CRYPTO.DES_CBC_PKCS5
                                         ,KEY => V_KEY_RAW, IV => NULL);                      
   RETURN V_ENCRYPTED_RAW;
  END ENCRYPT;
  /******************************************************************************
  복호화
 ******************************************************************************/
  FUNCTION DECRYPT(V_INPUT_STRING IN VARCHAR2, --> 암호화되어진 문자 그대로 넣어줌
                  V_KEY IN VARCHAR2 := 'KHJAVA301$') --> 복호화할 비밀키
  RETURN VARCHAR2
  
  IS
  V_DECRYPTED_RAW  VARCHAR2(64);
  V_DECRYPTED_CHAR VARCHAR2(64);
  BEGIN
   V_KEY_RAW := UTL_I18N.STRING_TO_RAW(V_KEY, 'AL32UTF8');
   
   V_DECRYPTED_RAW := DBMS_CRYPTO.DECRYPT(SRC => V_INPUT_STRING
                                        ,TYP => DBMS_CRYPTO.DES_CBC_PKCS5
                                        ,KEY => V_KEY_RAW, IV => NULL);
   V_DECRYPTED_CHAR := UTL_I18N.RAW_TO_CHAR(V_DECRYPTED_RAW,'AL32UTF8');
   
   RETURN V_DECRYPTED_CHAR;
  END DECRYPT;
 END PKG_CRYPTO;

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

oracle 초성검색 function(mssql function 수정)  (0) 2016.04.19
세션 킬(Session Kill)  (0) 2015.02.24
oracle 외부접속  (0) 2015.02.24
where절에 if문처럼 and조건 사용하기  (1) 2015.02.24
ORACLE 백업 복원,암호 복원  (0) 2015.02.24
Posted by 타카스 류지
|

오라클 cmd 계정 바로가기 아이콘 & 접속


1) 바탕화면 -> 새로 만들기 -> 바로 가기

2) 항목 위치 입력 ( cmd.exe /K sqlplus scott/tiger )
3) 바로가기에 사용할 이름 ( sqlplus scott )
 

 


cmd 바로가기 아이콘 으로 외부 외부 오라클 서버 접속
 
1) 바탕화면 -> 새로 만들기 -> 바로 가기

2) 항목 위치 입력 ( cmd.exe /K sqlplus scott/tiger@SID_IP )
 
ex ) cmd.exe /K sqlplus scott/toger@ORA_192.168.0.1
  
oracle 9i 기준 : tnsnames.ora에 설정 ip, sid 추가해 주면 된다.
 
oracle home directory -> ora92 -> network -> admin ->

 
tnsnames.ora 설정 추가
 

ORA_192.168.0.1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = ORCL)
      (SERVER = DEDICATED)
    )
  )
 

참고 : sys 접속 방법 cmd.exe /K sqlplus sys@ORA_192.168.0.1 as sysdba
 

 

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

세션 킬(Session Kill)  (0) 2015.02.24
패키지 생성 암호화 CRYPTO  (0) 2015.02.24
where절에 if문처럼 and조건 사용하기  (1) 2015.02.24
ORACLE 백업 복원,암호 복원  (0) 2015.02.24
SQL 명령어  (0) 2015.02.24
Posted by 타카스 류지
|

where절

AND (((30 = A.QRY_RNG ) AND (A.REQ_DEPT LIKE '%'||''||'%'))

       OR ((10 = A.QRY_RNG  ) and (A.REQ_DEPT LIKE '%'||?||'%')))

 

위 구문을 풀이해보면


if (30 == A.QRY_RNG) {

   A.REQ_DEPT_LIKE '%'||''||'%'

}else if ( 10 == A.QRY_RNG) {

  A.REQ_DEPT_LIKE '%'||?||'%'

}


 

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

패키지 생성 암호화 CRYPTO  (0) 2015.02.24
oracle 외부접속  (0) 2015.02.24
ORACLE 백업 복원,암호 복원  (0) 2015.02.24
SQL 명령어  (0) 2015.02.24
비교 UPDATE 구분  (0) 2015.02.24
Posted by 타카스 류지
|

1. 오라클 계정으로 이동한다. (참고: 오라클 exp명령어는 sqlplus로 접속해서 수행하는것이 아니라 oracle 계정에서 수행한다.)


백업
=================================================================================
#su - oracle
#exp
 username: 유저이름
 Password: 패스워드

 버퍼사이즈 (용량)  > 용량
 
 Export file: expdat.dmp > xxxx.dmp  :덤프파일이름지정해준다.
 
 (2)U(sers), or (3)T(ables): (2)U > U  : 유저로 백업할것인가 테이블로 백업할 것인가

 Export grants (yes/no): yes >    엔터

 Export table data (yes/no): yes >  엔터
 
 Compress extents (yes/no): yes >   엔터

백업된 파일을 확인한다.
=================================================================================

 

 

복원
=================================================================================
#imp system/패스워드 fromuser=유저이름 touser=유저이름 file=덤프이름.dmp commit=y ignore=y <--오류시 다음진행
=================================================================================

tip : with warning 가 나타날때
---------------------------------------------------------------------------------
imp 하실때
두번째 물음에서 defult no 하시지 마시고
yes 하세요

Export file created by EXPORT:V10.02.01 via conventional path
import done in KO16KSC5601 character set and AL16UTF16 NCHAR character set
List contents of import file only (yes/no): no >

Ignore create error due to object existence (yes/no): no > yes
---------------------------------------------------------------------------------

 

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

oracle 외부접속  (0) 2015.02.24
where절에 if문처럼 and조건 사용하기  (1) 2015.02.24
SQL 명령어  (0) 2015.02.24
비교 UPDATE 구분  (0) 2015.02.24
컬럼 정보 확인  (0) 2015.02.24
Posted by 타카스 류지
|

SQL 명령어

Database/ORACLE 2015. 2. 24. 11:52
* 검색 - 오라클 명령어에서 대소문자를 가리지는 않지만, 검색시에는 구분함.
    1) select
        a) distinct - 중복행제거
        b) * - all
        c) alias - 해당 컬럼에 다른 이름 부여 : as키워드를 사용하면 명시적이고
                                                                         따옴표로 묶으면, 대소문자 구분 가능
        d) 컬럼값중 숫자형 데이터는 산술연산 가능
        e) || - 연결연산자
        f) 작은따옴표 - 컬럼에 있는 데이터는 아니지만, 따옴표사이의 내용이 모든 행에 표시된다. 연결연산자와
           함께 사용하는 경우가 일반적
    2) where - from 절 다음에 와야 한다.
        a) and -
AND 연산일 경우에는 거짓이 앞에 있는 게 좋고, OR 연산자일 경우에는 참이 앞에 있는 것이 좋다
        b) or
        c) between ~ and ~ - 이상, 이하의 개념임. 미만, 보다일경우는 부등호 기호 사용
        d) in ( 'x', 'y', 'z' )
        e) is null / not -
NOT이 들어간 SQL 연산자는 사용을 하지 않는 것이 좋다. (ex. NOT IN, IS NOT NULL)
            null값으로 들어간 데이터를 확인하는 용도로 쓰인다.
        f) like
            i) %
            ii) _
            iii) like 'aa\%%' escape '\'
    3) order by 칼럼이름 [asc|desc]

    4) group by - 테이블보다 작은 그룹으로 묶어서 값을 얻으려 할 때 사용
        a) ROLLUP (a, b, c) - grouping sets( (a, b, c), (a, b), (a), ())
        b) CUBE (a, b, c) - grouping sets( (a, b, c), (a, b), (a, c), (b, c), (a), (b), (c), ())
    5) having - group by 의 수행결과에 조건을 부여해서 값을 얻으려 할 때 사용
    6) grouping sets
        a) UNION - 합집합 : 중복된 데이터를 제거하고 데이터를 반환
        b) INTERSECT - 교집합 : 상위 select절과 하위 select 절의 중복된 데이터를 반환
        c) MINUS - 차집합 : 중복된 데이터를 제거
        d) UNION ALL - 합집합+교집합
    7) subquery - select 문 안에 삽입된 select 문



* 기타 명령어
    1) $cls - 화면정리
    2) set time on | off - 시계표시
    3) set timing on | off - 시간체크



* Join - 하나 이상의 테이블로부터 자료를 검색하기 위하여 조인을 사용합니다.
    일반적으로 PK와 FK를 사용하여 조인하는 경우가 대부분이지만, 논리적인 값들의
    연관성으로 조인하는 경우도 있습니다.
    1) where절에 조인 조건을 기술한다.
    2) 명확성을 위해 또는 효율성을 위해, 컬럼이름앞에 테이블 이름을 붙인다.
    3) 테이블을 조인하는 경우, 같은 컬럼이 존재하면, 컬럼명앞에 테이블명을 붙인다.

        a) Equijoin
        b) Non-Equijoin
        c) Outerjoin
        d) Selfjoin



* Equijoin
    조인조건에서 = 을 사용하여, 값들이 일치하는 경우에 사용하는 조인을 말한다.
    단순 조인, 또는 내부 조인이라고도 부른다.
    ex) select ename, dname, loc from emp e, dept d where e.deptno=d.deptno;
        Select tab1.col1 [, tab2.col2, ......]
        From tab1, tab2
        Where tab1.col1 = tab2.col2;



* Non-Equijoin
    테이블사이에 관련성이 없을 경우의 조인을 말한다. 비동등연산자를 사용 ex) between ~ and ~
    ex) select ename, grade from emp, salgrade where sal between losal and hisal;



* Outerjoin
    조인을 실행하다보면, 조인 조건에 맞지않아서, 화면에 나타나진 않지만, 조건만 맞으면,
    바로 출력될 수 있는 그런 행들을, 조인 조건과 무관하게 화면에 나타내기위한 조인을 말한다.
    ex) select ename, e.deptno, dname, loc from emp e, dept d where e.deptno(+)=d.deptno;
        salgrade테이블의 deptno 40번은, emp테이블에서 접근할 때, 조인조건여하에 따라 대개는
        나타나지 않는다. 이런 40번 행 조차도, 출력을 원하는 경우에 사용한다.



* Selfjoin
    같은 테이블에 대해 두개의 별칭을 작성하여, 테이블을 구분함으로서, From 절에 두개의
    테이블을 사용하는 것과 같은 조건을 만든다.
    ex) select e1.ename, e2.ename "Manager" from emp e1, emp e2 where e1.mgr=e2.empno;



* SubQuery
    다른 select 문에 내장된 또 하나의 select문이다.
    1) 서브쿼리는 괄호로 묶어야 한다.
    2) 연산자의 오른쪽에 위치해야한다.
    3) 서브쿼리에서는 order by 절을 포함하기 힘들다.
    ex)
        i) select avg(sal) from emp;
        ii) select * from emp where sal > 2133;
        iii) select * from emp where sal > (select avg(sal) from emp);



* DB 조작명령어 구분
    1) DML - Data Manipulation Language
    - SELECT : 검색

    - INSERT : 삽입
        ex) insert into 테이블이름 [(컬럼1 [, 컬럼2, .....])] values (값1 [, 값2, ......]);
              insert into 목적테이블이름 select 목적테이블컬럼1 [, 목적테이블컬럼2, ......] from 소스테이블;
              insert all
                        [when 조건1 then] into 테이블이름1
                        [when 조건2 then] into 테이블이름2
                        [else into 디폴트테이블명]
                       
select 목적테이블컬럼1 [, 목적테이블컬럼2, ......] from 소스테이블;

    - UPDATE : 갱신
        ex) update 테이블이름 set 컬럼1=값1 [, 컬럼2=값2, ......] [where 조건];

    - DELETE : 삭제
        ex) delete  [from] 테이블이름 [where 조건];

    - COMMIT : 확인

    - ROLLBACK : 취소
        롤백시킬 위치조절 : (savepoint 임의의이름) v.s. (savepoint to 임의의이름)


    2) DDL - Data Definision Language
    - CREATER : 생성
            ex) create table 테이블이름 ( 컬럼명1 데이타타입 [, 컬럼명2 데이타타입, ......]  );
                  create table 테이블이름 ( 컬럼명1 데이타타입 constraint 테이블명_pk_컬럼명 PRIMARY KEY );
                  create table 테이블이름 ( 컬럼명1 데이타타입 default 디폴트값 );
                    ex) create table emp ( hiredate date default sysdate );
        a) DATA TYPE
            varchar2(문자데이터길이1~4000)
            number(p, s) - 전체 p자리중, 소수점이하 s자리 : 생략가능
            date - 7byte, bc 4712/01/01 ~ ad 9999 12/31
            clob - 대용량 문자, 1~4Gbyte
            blob - 대용량 기타, 1~4Gbyte
        b) 하위질의를 통한 테이블복사
            ex) create table 테이블이름 as select 컬럼명1 [, 컬럼명2, ......] from 존재하는테이블이름(=기존테이블)
                  create table 테이블이름 (컬럼명1 [, 컬럼명2, ......]) as select (컬럼명1 [, 컬럼명2, ......]) from 기존테이블

    - ALTER : 변경
        ex)
            a) 삽입 : alter table 테이블이름 add 컬럼이름 varchar2(10);
            b) 삭제 : alter table 테이블이름 drop column 컬럼이름;
            c) 변경 : alter table 테이블이름 modify 컬럼이름 number;
                           alter table 테이블이름 rename column 원래이름 to 바꿀이름;
        ex) 제약조건없이 이미 생성한 테이블에 제약조건 추가, 삭제
            a) 추가 : alter table 테이블이름 add constraint 제약조건이름_pk PRIMARY KEY(컬럼이름);
            b) 삭제 : alter table 테이블이름 drop constraint 제약조건이름_pk;

    - DROP : 삭제
        ex) drop table 테이블이름;
            a) 휴지통 비우기 : purge recyclebin;
            b) 휴지통 내용보기 : show recyclebin;
            c) 테이블 복원하기 : flashback table 테이블명 to before drop;

    - RENAME : 기존테이블이름을 변경
        ex) rename 원래테이블이름 to 바꿀테이블이름;

    - TRUNCATE : 테이블절단 - 특정컬럼에 해당하지않고, 테이블의 레코드전체를 날려버림.
        ex) truncate teble 컬럼이름;

    3) DCL - Data Control Language
    - 권한 확인 a) select role from dba_roles;
                            @경로\role.sql
                         b) select * from user_tab_privs_recd;
    - Role 확인
        ex) select * from user_role_privs;

    - GRANT : 권한부여
        a) 세션생성(=접속허용) - grant create session to 계정;
        b) 테이블생성 - grant create table to 사용자;
        c) 특정 사용자에게 특정 테이블 권한 부여;
            ex) conn scott/tiger
                  grant select on 테이블이름 to 계정;

    - REVOKE : 권한취소
        a) 접속권한취소 - revoke create session from 계정;
        b) 특정사용자에게 특정 테이블 권한 취소
            ex) revoke select on 테이블이름 from 계정;



* 제약조건
unique UK 중복된 값을 불허
not null NN null값 불허
primary key PK unique와 not null의 조건을 만족
foreign key FK 참조하는 테이블의 컬럼의 값에 연동
check CK 설정한 값만 받아들인다.



* TRANSACTION - 어떤 하나의 작업단위. ex) 은행계좌이체



* Schema 예제
    1) select * from SCOTT.emp; (= select * from emp;) - 자신이 소유한 객체를 언급시에는 객체명앞의
                                                                                        스키마를 생략할 수 있음.
    2) 하지만, 다른 계정에서 emp테이블을 보려고 하면, 자신의 소유가 아니기때문에, 오류가 발생
        한다. 따라서, 자신의 소유가 아닌 객체(테이블등)를 보려면, 그 객체를 소유한 사용자명을 반
        드시 기술해주어야 한다.
    3) 그렇지만, 일단은 타 계정의 객체들을 보려면, 권한을 먼저 얻어야한다. select 권한을 hr계정에서
        scott계정에 부여해, scott계정에서 hr계정의 테이블들을 select로 열어보자.
        a) conn hr/hr
        b) grant SELECT on HR.jobs to SCOTT;
        c) conn scott/tiger
        d) select * from user_tab_privs_recd;  - 권한확인
        e) select * from HR.job;



* Synonym (동의어) - 다른 계정의 객체에 접근할 때, [사용자명.테이블명]으로 표현하는데, 긴 사용자명+
                                    테이블명에 별칭을 부여하여 간단하게 접근할 수 있도록 하는 방법



* Data Dictionary - 오라클 DB내에 저장된 모든 객체(거시기) 정보를 제공합니다.
   System View - (데이터 딕셔너리 뷰)와 (동적성능 뷰) 로 이루어져있으며, 데이타 딕셔너리에 대한
                            내용조회를 가능하게 해 준다.
   Schema - 객체를 소유한 사용자명.
    1) 데이터 딕셔너리 뷰 - 해당 DB에 존재하는 오브젝트 및 기타 정보에 대한 내용을 조회.
        USER_ - 현재 접속한 사용자가 소유한 객체의 정보를 제공
                     - 사용자가 생성한 스키마의 정보를 볼 수 있다. (유저의 시각)

        ALL_ - 사용자가 접근 가능한 모든 스키마(설계도) 의 정보를 제공
                  - 권한을 부여받았기에 가능하다. (유저의 시각을 넓혀줌)

        DBA_ - 데이타베이스 관리를 위한 정보를 제공
                   - 모든 사용자의 스키마 정보를 볼 수 있다.(관리자의 시각)

    2) 동적성능뷰 - 메모리 상태 및 현재 세션에 대한 정보를 확인할 수 있음.
        데이터 딕셔너리 뷰는 DBA_, ALL_, USER_ 로 뷰이름이 시작되는 반면, 동적성능뷰는
        v$로 뷰 이름이 시작된다.

    3) select table_name from user_tables;
        select table_name from all_tables;

        system으로 접속해야만, 접근 가능한 DBA_
        select table_name from dba_tables;

    4) 자주 사용되는 딕셔너리 뷰와 약칭
        테이블 검색 : select table_name from user_tables;
        시퀀스 검색 : select sequence_name, min_value, max_value, increment_by, cycle_flag from user_sequences;
        인덱스 검색 : select index_name, table_name from user_indexes;
        인덱스 컬럼 검색 : select index_name, table_name, column_name from user_ind_columns;
        뷰 검색 : select * from user_views;

        테이블 검색 : select * from tab;
        시퀀스 검색 : select * from seq;

    5) 데이터 사전에 접근
        전체 탐색 : select count(table_name) from dictionary;
        특정 테이블 검색 : select count(table_name) from dictionary where table_name like 'USER%' and table_name like '%TABLE%';
        테이블 설명 참조 : select comments from dictionary where table_name = 'USER_TABLES';

    6) 활용
        사용자 정보 열람 : select username, default_tablespace, temporary_tablespace from dba_users where username = &username;
        사용자 테이블 정보 열람 : select table_name, tablespace_name, partitioned, nested from user_tables where table_name = &table_name;
        제약조건 열람 : select constraint_name, constraint_type from user_constraints where table_name = &table_name;
        View 정보 열람 : select  text from user_views where view_name = &view_name;



* SEQUENCE
    ex) create sequence 시퀀스이름
                                    start with n - 시작값
                                    increment by n - 증가값
                                    maxvalue 99999 - 최대값
                                    cycle | nocycle - 순환여부
                                    cache | nocache - 디폴트는 20;
    시퀀스이름.nextval | currval

    수정 - alter sequence 시퀀스이름
                                    start with n - 시작값
                                    increment by n - 증가값
                                    maxvalue 99999 - 최대값
                                    cycle | nocycle - 순환여부
                                    cache | nocache - 디폴트는 20;
    삭제 - drop sequenct 시퀀스이름



* VIEW - 자체의 데이터는 없지만, 테이블의 데이터를 보거나, 변경할 수 있는 창이다.
                테이블의 데이터를 선택적으로 보여줄 수 있어, 접근제한을 가할 수 있다.
                복잡한 질의어를 통해 결과를 구하고, 반복할 수 있다.
    1) simple view
        하나의 테이블에서만 데이터가 유래된다.   
        DML수행가능

    2) complex view
        다중테이블에서 데이터가 유래된다.
        DML수행불가

        ex) create view 뷰이름 as 서브쿼리 [with check option] [with read only];
          초록글씨 부분이 없다면, 그 이하의 문장은 일반 select 문장이다.
          a) with check option - 조건변경 불가
          b) with read only - DML수행 불가

    3) 인라인 뷰 - 안쪽, 바깥쪽으로 쿼리문이 나누어질 때, 안 쪽 쿼리문을 별칭을 붙여 view처럼
                             사용한다.
        ex) 문제 7번
        ex) select rownum, ename, sal from ( select ename, sal from emp order by sal desc ) where rownum <= 5;



* INDEX
    1) 목적 - 쿼리를 빠르게 하기 위해서
    2) 내부구조 - B*트리 구조
    3) 생성
        ex) create index 인덱스이름 on 테이블이름(컬럼이름);
    4) 인덱스 재생성
        ex) alter index 인덱스이름 rebuild;



* INDEX 사용조건
    1) 비추
        a) 질의문의 결과가 전체 행의 10 ~15% 이상을 읽어들일 것으로 예상된다.
        b) 테이블이 자주 갱신된다. 인덱스 유지에 상대적으로 시간이 많이 걸린다.
        c) 테이블이 작다.
        d) 해당 컬럼이 질의의 조건으로 자주 사용되지 않는다.
    2) 추천
        a) 테이블에 레코드가 많다.
        b) 조건절에 해당 컬럼이 자주 사용된다.
        c) 검색결과가 2~4%정도일 경우
        d) join에 자주 사용되는 컬럼
        e) null을 포함하는 컬럼이 많은 경우



* 테이블 스페이스
    오라클에서 DB의 데이터를 저장하는 가장 큰 개념.
    ex) select tablespace_name, status from dba_tablespaces;
          select tablespace_name, file_name, bytes from dba_data_files;



* 계정
    1) 사용자 계정 생성
        a) 계정생성 - create user ID identified by PW;
        b) 권한부여 - grant connect,resource to ID;(
    2) 계정 비번바꾸기
        alter user <계정이름> identified by <사용할 암호>;
    3) 계정삭제하기
        drop user ID;
    4) 계정 잠그기/풀기
        alter user <잠긴계정> account lock / unlock;
    5) 모든 계정 확인하기
        select * from all_users;

    6) 세션 수 확인
        select schemaname, count(*) from v$session group by schemaname;
    7) 각 세션별 구분
        select username, status, sid, serial# from v$session;
    8) 특정 세션 kill
        alter system kill session 'sid번호, serial#번호';



* 계정 만들기 종합 - 테이블스페이스까지 응용
    1) 계정 생성 - ssr/ssr
        ex) create user ssr
              identified by ssr
    2) 권한 부여 - 접속권한 포함하여 기본권한 role
        ex) grant connect, resource to ssr;
    3) 테이블 스페이스 생성 - (10M, 경로 : c:\tablespace) : 단지 ssr이름의 테이블스페이스가
                                                                                               만들어졌을 뿐, 아직 ssr계정과는
                                                                                               아무 상관없음.
        ex) create tablespace ssr
              datafile 'c:\tablespace\ssr.dbf' size 10m;
    4) ssr계정의 디폴트 테이블 스페이스를 ssr테이블스페이스로 변경
        ex) alter user ssr default tablespace ssr;
    5) ssr 테이블스페이스의 용량제한을 푼다.
        ex) alter user ssr quota unlimited on ssr;
    6) 테이블생성
    7) 시퀀스생성



* 문자코드
    1) ASCII 문자코드 128문자 (7bit) - 영어
    2) ISO-8859-9 256문자 (8bit) - 서유럽언어
    3) 한국표준협회의 공업표준문자집합 - a) KSC-5601 : 2바이트로 완성형한글을 표현
                                                                                                 아스키문자에 대한 고려없음.
                                                                         b) KSC-5636 : 아스키문자를 고려한 표현
                                                                         c) EUC-KR : 확장유닉스코드(Extended UNIX Code)
                                                                                               라고 하며, 영어는 b)방식으로,
                                                                                               한글은 a)방식으로 조합해 사용.
                                                                                                KSC-5861
    4) 유니코드 - 두가지 인코딩 방식이 있음
        a) UTF-8 : 아스키문자를 만나면, 1바이트로 인코딩하고, 다른 문자는 2바이트 또는
                         그 이상의 바이트로 처리하는 방식을 따름. 한글의 경우는 3바이크로 처리.
                         아스키 문자 체계와 호환이 가능해서, 인터넷상에서 기본적인 인코딩으로 환영받음.
                         XML에서도 별도의 언급이 없으면, 디폴트로 UTF-8 인코딩으로 간주함.
        b) UTF-16 : 아스키건 뭐건 모두 2바이트로 처리한다. 65,356개를 처리할 수 있다.
    5) XML선언에서 인코딩 방식을 "euc-kr"로 지정하는 이유 - 운영체제와 관련이 있다.
        한글 운영체제의 인코딩방식이 MS의 경우(MS949 : EUC-KR과 동일방식) MS949방식을 채택
        하고 있으며, 이는 euc-kr( or KSC-5601)과 동일한 인코딩방식이다. 즉 한글을 2바이트로 처리
        한다는 소리다. 그런데, XML의 디폴트인 UTF-8방식은 한글을 3바이트로 처리하기때문에,
        처음엔 좀 되는 듯 싶다가도, 나중에, 아귀가 안 맞으면서, 오류를 일으키게된다.

        따라서, 비록, UTF-8이 인터넷의 기본 인코딩으로 환영받고 있고, XML의 디폴트도 UTF-8 이지만,
        운영체제에서 파일을 저장할 때, euc-kr일 것으로 예상하는 상황인지라, 두 인코딩방식이 일치하지
        않는다면, 오류가 발생하기때문에, 저장시에도 명시적으로 euc-kr, 즉 운영체제가 지원하는 한글
        인코딩 방식을 따르겠다고, 선언해주어야한다.

 

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

where절에 if문처럼 and조건 사용하기  (1) 2015.02.24
ORACLE 백업 복원,암호 복원  (0) 2015.02.24
비교 UPDATE 구분  (0) 2015.02.24
컬럼 정보 확인  (0) 2015.02.24
계정별 권한주기  (0) 2015.02.24
Posted by 타카스 류지
|

--테이블명 조회
SELECT * FROM all_objects WHERE object_type='TABLE' AND owner = '계정명'


UPDATE  /*+ BYPASS_UJVC */
(
 SELECT [b.칼럼] as [칼럼 표현명] , [a.칼럼] AS [칼럼 표현명]
 from [테이블 a], [테이블 b]
 where [a.칼럼] = [b.칼럼] and [a.칼럼] != [b.칼럼]
)
SET [칼럼표현명(넣을곳)] = [칼럼표현명(넣을값)]

 

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

ORACLE 백업 복원,암호 복원  (0) 2015.02.24
SQL 명령어  (0) 2015.02.24
컬럼 정보 확인  (0) 2015.02.24
계정별 권한주기  (0) 2015.02.24
SQL 명 정리  (0) 2015.02.24
Posted by 타카스 류지
|
SELECT
     BB.OWNER                               AS OWNER
    ,BB.TABLE_NAME                          AS TABLE_ID
    ,GG.COMMENTS                            AS TABLE_NAME
    ,BB.COLUMN_ID+1                         AS COLUMN_NO
    ,BB.COLUMN_NAME                         AS COLUMN_ID
    ,AA.COMMENTS                            AS COLUMM_NAME
    ,BB.DATA_TYPE                           AS DATA_TYPE
    ,DECODE(BB.DATA_TYPE, 'NUMBER', BB.DATA_PRECISION, BB.DATA_LENGTH) AS DATA_LENGTH
    ,BB.DATA_SCALE                          AS DATA_SCALE
    ,DECODE(CC.COLUMN_NAME, '', '', 'Y')    AS PK
    ,DECODE(BB.NULLABLE, 'Y', '', 'Y')      AS NULLABLE
    ,BB.DATA_DEFAULT                        AS DEFAULT_VALUE
    ,SUBSTR(EE.CONSTRAINT_NAME, 12, 7)      AS FK_ID
    ,FF.TABLESPACE_NAME                     AS TS_NAME
    ,FF.NUM_ROWS                            AS ROW_CNT
    ,DD.CREATED                             AS CRE_DATE
    ,DD.LAST_DDL_TIME                       AS UPT_DATE
FROM ( SELECT * FROM    ALL_COL_COMMENTS  ) AA,
 ( SELECT * FROM    ALL_TAB_COLUMNS   ) BB,
 ( SELECT * FROM    ALL_CONS_COLUMNS    WHERE CONSTRAINT_NAME LIKE 'PK%') CC,
 ( SELECT * FROM    ALL_OBJECTS         WHERE OBJECT_TYPE = 'TABLE' AND OWNER = '계정명' ) DD,
 ( SELECT * FROM    ALL_CONS_COLUMNS    WHERE CONSTRAINT_NAME LIKE 'FK%') EE,
 ( SELECT * FROM    ALL_TABLES          WHERE OWNER = '계정명') FF,
 ( SELECT * FROM    ALL_TAB_COMMENTS    WHERE OWNER = '계정명') GG
WHERE 1=1
    AND   AA.OWNER          = BB.OWNER
    AND   AA.TABLE_NAME     = BB.TABLE_NAME
    AND   AA.COLUMN_NAME    = BB.COLUMN_NAME
    AND   AA.OWNER          = CC.OWNER(+)
    AND   AA.TABLE_NAME     = CC.TABLE_NAME(+)
    AND   AA.COLUMN_NAME    = CC.COLUMN_NAME(+)
    AND   AA.OWNER          = DD.OWNER
    AND   AA.TABLE_NAME     = DD.OBJECT_NAME
    AND   AA.OWNER          = EE.OWNER(+)
    AND   AA.TABLE_NAME     = EE.TABLE_NAME(+)
    AND   AA.COLUMN_NAME    = EE.COLUMN_NAME(+)
    AND   AA.TABLE_NAME     = FF.TABLE_NAME(+)
    AND   AA.TABLE_NAME     = GG.TABLE_NAME(+)
    -- AND   SUBSTR(AA.TABLE_NAME,0,2) = '구분자'  <-- 테이블이 많을시에 구분 조건
    AND   AA.TABLE_NAME LIKE '테이블 명'
ORDER BY AA.TABLE_NAME, BB.COLUMN_ID


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

SQL 명령어  (0) 2015.02.24
비교 UPDATE 구분  (0) 2015.02.24
계정별 권한주기  (0) 2015.02.24
SQL 명 정리  (0) 2015.02.24
대용량 데이터 밀어넣기  (0) 2015.02.24
Posted by 타카스 류지
|

//이름 설정 각 계정별 설정
CREATE SYNONYM 테이블명 FOR 계정명.테이블명;

 

//권한주기

GRANT INSERT,SELECT,UPDATE,DELETE ON "계정명"."테이블명" TO 부여할 계정명 ;

 

 

 

#예제#

 

//테이블 가지고있는 계정으로 로그인후 '시노님' 생성

CREATE SYNONYM "MANAGER" FOR SYSTEM.MANAGER;

 

//시노님 생성후 계정으로 권한 부여

GRANT INSERT,SELECT,UPDATE,DELETE ON "SYSTEM"."MANAGER" TO SCOTT ;

 

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

비교 UPDATE 구분  (0) 2015.02.24
컬럼 정보 확인  (0) 2015.02.24
SQL 명 정리  (0) 2015.02.24
대용량 데이터 밀어넣기  (0) 2015.02.24
DELETE 삭제했던 데이터 복구  (0) 2015.02.16
Posted by 타카스 류지
|

SQL 명 정리

Database/ORACLE 2015. 2. 24. 11:40

 - SQL(대소문자 구별 안함)
   - 계정 생성 방법 : create user 계정명 identified by 비밀번호;
   - 계정 권한 부여 : grant resource, connect to 계정명;

   - 테이블 생성 : create table 테이블명(컬럼명, 데이터타입 추가속성, ...);
     - 추가 속성 : not null primary key
   - 테이블 삭제 : drop table 테이블명;
   - 테이블 정보 조회 : desc 테이블명;
   - 테이블 코멘트 : comment on table 테이블명 is 코멘트명;
   - 레코드 검색
     - 전체 : select * from 테이블명;
     - 특정 컬럼 : select 특정컬럼명, ... from 테이블명 where 조건식;
     - 조건 :  select * from 테이블명 where 조건식;
     - 별칭 : select 컬럼명 병칭, ... from 테이블명;
     - 연산(숫자인 경우만) : select 컬러명 [+|-|*|/] 숫자 from 테이블명;
     - 정렬 : select * from 테이블명 order by 컬럼 [asc|desc];
     - 테이블 레코드 수 : select count(*) from 테이블명;
     - 최대/최소값(문자열도 됨) : select max/min(컬럼명) from 테이블;

     - 모든 계정 검색 : select * from all_users;
     - 계정 내 모든 테이블 검색 : select * from tab;
   - 레코드 추가
     - 컬럼 갯수만큼 : insert into 테이블명 values ('값', ... );
     - 넣고 싶은 컬럼만 : insert into 테이블명 (넣고 싶은 컬럼명 ... ) values (값 ... );
   - 레코드 수정 : update 테이블명 set 수정할 컬러명 = '값' where 조건식;
   - 레코드 삭제 : delete from 테이블명 wehre 조건식;

   - 컬럼 추가 : alter table 테이블명 add(컬럼명 컬럼타입);
   - 컬럼명 수정 : alter table 테이블명 rename column 컬럼명 to 수정할 이름;
   - 컬럼 데이터타입 수정 : alter table 테이블명 modify(컬럼명 타입);
   - 컬럼 삭제 : alter table 테이블명 drop column 컬럼명;
   - 컬럼 코멘트 : comment on column 테이블명.컬럼명 is 코멘트명;
   - 커밋 : commit
   - (마지막 커밋 시점으로)롤백 : rollback

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

컬럼 정보 확인  (0) 2015.02.24
계정별 권한주기  (0) 2015.02.24
대용량 데이터 밀어넣기  (0) 2015.02.24
DELETE 삭제했던 데이터 복구  (0) 2015.02.16
SELECT문 활용(대체 변수,함수,형변환)  (0) 2012.11.01
Posted by 타카스 류지
|

테이블 생성

 

CREATE TABLE "RMZZ_POST_DORO" (
    "ZIPCODE" VARCHAR2(10 BYTE) NULL ,
    "DORO" VARCHAR2(50 BYTE) NULL ,
    "SIDO" VARCHAR2(50 BYTE) NULL ,
    "SIKUGN" VARCHAR2(50 BYTE) NULL ,
    "EUP" VARCHAR2(50 BYTE) NULL ,
    "JIHA" VARCHAR2(50 BYTE) NULL ,
    "BONBUN" VARCHAR2(50 BYTE) NULL ,
    "BUBUN" VARCHAR2(50 BYTE) NULL ,
    "DONG" VARCHAR2(50 BYTE) NULL
)
LOGGING
NOCOMPRESS
NOCACHE

;


COMMENT ON TABLE "RMZZ_POST_DORO" IS '우편번호 도로';
COMMENT ON COLUMN "RMZZ_POST_DORO"."ZIPCODE" IS '우편번호';
COMMENT ON COLUMN "RMZZ_POST_DORO"."DORO" IS '도로명';
COMMENT ON COLUMN "RMZZ_POST_DORO"."SIDO" IS '시,도';
COMMENT ON COLUMN "RMZZ_POST_DORO"."SIKUGN" IS '시,군';
COMMENT ON COLUMN "RMZZ_POST_DORO"."EUP" IS '읍';
COMMENT ON COLUMN "RMZZ_POST_DORO"."JIHA" IS '지하';
COMMENT ON COLUMN "RMZZ_POST_DORO"."BONBUN" IS '본번';
COMMENT ON COLUMN "RMZZ_POST_DORO"."BUBUN" IS '부분';
COMMENT ON COLUMN "RMZZ_POST_DORO"."DONG" IS '동';
 

 

 

[post.ctl]

 

load data
infile 'post.csv'
insert into table RMZZ_POST_DORO
fields terminated by ','
(ZIPCODE,DORO,SIDO,DONG,SIKUGN,EUP,JIHA,BONBUN,BUBUN)

 

 


rem post폴더에 있는 3개의 파일을 루트(c:\)디렉토리에 저장후....
rem c프롬포트에서
sqlplus를 빠져나와서 post가 있는 폴더로 이동한 다음 복사해서 붙여넣기..
sqlldr SCOTT/SCOTT1234 control=post.ctl log=post.log bad=post.bad

 

 

 

 

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

컬럼 정보 확인  (0) 2015.02.24
계정별 권한주기  (0) 2015.02.24
SQL 명 정리  (0) 2015.02.24
DELETE 삭제했던 데이터 복구  (0) 2015.02.16
SELECT문 활용(대체 변수,함수,형변환)  (0) 2012.11.01
Posted by 타카스 류지
|

 

[검색]

SELECT *
FROM '테이블명' AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '15' MINUTE)
WHERE '검색조건'

SELECT *
FROM '테이블명' AS OF TIMESTAMP TO_TIMESTAMP('20150213 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE '검색조건'

 

[한방에 INSERT]

INSERT INTO '테이블명'
SELECT *
FROM '테이블명' AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '15' MINUTE)
WHERE '검색조건'

INSERT INTO '테이블명'
SELECT *
FROM '테이블명' AS OF TIMESTAMP TO_TIMESTAMP('20150213 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE '검색조건'

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

컬럼 정보 확인  (0) 2015.02.24
계정별 권한주기  (0) 2015.02.24
SQL 명 정리  (0) 2015.02.24
대용량 데이터 밀어넣기  (0) 2015.02.24
SELECT문 활용(대체 변수,함수,형변환)  (0) 2012.11.01
Posted by 타카스 류지
|

대체변수

대체변수는 사용하고자 하는 값을 입력하고자 할때 쓰는 변수이다

사용 형태는 '&변수이름'형식으로 사용한다. 자세한 사용방법은 EX)로 나타낸다

EX)와 같이 입력을 하고 실행을 시킬경우

'ENTER value for 변수이름: '식의 문장이 생인가

여기서 입력을 하게되면 &로 입력했던 문장의 자리에 입력한 값이 들어가서 실행이 되게 된다.

EX1)

SELECT employee_id, last_name, job_id, &column_name

FROM employees

WHERE &condition

ORDER BY &order_column

// 첫번재 & 값은 출력하고자 하는 컬럼의 값이고

두번쩨는 조건을 입력하는 곳이다

세번째는 정렬을 하고자 하는 기준을 입력하는 곳이다.

단일행함수

단일행 함수란 출력하는 문자에 적용되는 함수이다.

이름

사용형태

사용예)

CONCAT

두가지문자를 한곳에 출력하는 함수

CONCAT('hello','world') = helloworld

SUBSTR

문자에서 정해진 위치의 3가지 문자를 출력하는 삼수

SUBSTR('helloworld',1,5) = hello

LENGTH

문자의 길이를 출력하는 함수

LENGTH('helloworld') = 10 // 문자의 길이 수

INSTR

문자가 있는 위치를 출력하는 함수

INSR('helloworld','w') = 6 // 문자가 있는 위치

LPAD

공간을 정의하고 남은 공간에 임의의 문자를 입력하는 함수(왼쪽에)

LPAD(salary,10,'*') = *****24000

RPAD

공간을 정의하고 남은 공간에 임의의 문자를 입력하는 함수(오른쪽에)

RPAD(salary,10,'*') = 24000*****

REPLACE

임의의 문자를 지정하는 문자로 바꾸는 함수

REPLACE('JACK and JUE','J','BL') = BLACK and BLUE

TRIM

지정한 문자를 문장에서 제외하고자 하는 함수

TRIM('h' FROM 'helloworld' ) = elloworld

UPPER

컬럼이나, 문자를 모두 대문자로 나타내는 함수

UPPER('hello')=HELLO

LOWER

컬럼이나,문자를 모두 소문자로 나타내는 함수

LOWER('HELLO')=hello

Q1)employees테이블에서 last_name이 4글자인 사원의 모든 정보를 출력하시오

SELECT *

FROM employees

WHERE LENGTH(last_name)=4

Q2) employees테이블에서 last_name에 k를 포함한 사원의 풀네임을 출력하시오.(last_name+first_name)

숫자관련 함수

숫자에 관련되어 사용하는 함수

ROUND(45.926,2) = 45,93 // 반올림

TRUNC(45.926,2) = 45.92 // 버림

MOD(1600,300) = 100 // 나머지

숫자

1

2

3

.

4

5

6

반올림/버림 지정 숫자

-3

-2

-1

0

1

2

자리수

100의자리

10의자리

1의자리

소수점1자리

소수점2자리

소수점3자리

날짜관련 함수

함수이름

기능

활용방법

SYSDATE

현재의 날짜를 출력

MONTHES BETWEEN

두가지 날짜의 기간을 출력

NEXT_DAY

다음년도를 출력

LAST_DAY

전년도를 출력

ROUND

날짜를 반올림하여 나타냄

(반올림기준 : 6월이상,15일 이상)

ROUND (SYSDATE,'MONTH') =

/현재의 달를 일기준 반올림

(15일전이면 현재의 달,이후는 다음달)

ROUND ( SYSDATE,'YEAR') =

/현재의 날짜를 달도기준으로 반올림

(6월전이면 현재년도 1월1일,

이후는 내년 1월1일 출력)

TRUNC

날짜를 버림하여 나타냄

위와 비슷하지만 선자를 따름

형변환

데이터 베이스 저장 시 저장하는 데이터의 유형을 조정하는 것

함수이름

기능

to_NUMBER()

문자였던 것을 숫자로 빠꿔준다.

to_VARCHAR2()=to_CHAR()

숫자였던것을 문자로 바꿔준다.

to_DATE()

문자였던 것을 날짜로 변경한다.

NUMBER()

()안에 숫자의 크기를 입력한다(입력함수)

VARCHAR2(20)

20글자 이상은 넘지않게 입력한다.

char(20)

무조건 20글자를 채워서 입력

YYYY

Y의 갯수만큼 년도 표현

YEAR

4자리를 모두 표현

MONTH

날짜 이름 (풀네임)

MON

월을 3자리로 표현

MM

월을 숫자로 표현

DY

3자리 요일

DAY

요일 이름

DD

숫자료 표현

Q1) employees 테이블에서 입사일이 1990-12-31 이전에 입사한 사원의 last_name과 hire_date를 출력

(단, last_name = 대문자 , hire_date = 1990-12-31형식)

Q2) employees테이블에서 근무년수가 15년 이상인 사원의 성명(last_name || first_name)을 출력하세요

Q3) employees테이블에서 사번, 연봉(salary*12)을 천의자리에서 반올림한 값을(&200,000.00)형태로 출력하되 사번순으로 오름차순 하시오

Q4) employees테이블에서 last_name과first_name의 길이가 같은 사원의 department_id,last_name 길이

first_name길이, last_name 길이 + first_name길이를 1의 자리에서 반올림한 값, job_id를 department_id 순으로 내림차순 하여 정렬하여라

GENERAL FUNCTION

함수이름

활용형태

기능

NVL

NVL(컬럼값,바꿀값)

지정된 컬럼에서 null값을 지정하는 숫자로 바꾸는 함수

NVL(컬럼,변경하고자하는 숫자)

NVL2

NVL2(컬럼값,값1,값2)

컬럼이 NULL이 아니면 값1로, NULL이면 값2로 바꾸어 활용

NULLIF

NULLIF(값1,값2)

값1과 값2가 같으면 null값을 주고, 다르면 값1을 준다

COALESCE

COLESCE(값1,값2,값3...값N)

값들을 확인하여 NULL값이 안나오면 그값을 출력한다.

Q1)employees 테이블에서 employee_id, 연봉을 출력하시오(연봉 = salary*12+salary*12*commission_pct / 연봉표현방식 $1,500.00)

NVL2 활용

SELECT last_name, salary, commission_pct,
NVL2(commission_pct,'SAL+COMM','SAL') income
FROM employees
WHERE department_id IN(50,80);

NULLIF 활용

SELECT first_name,LENGTH(first_name)"expr1",
last_name, LEGTH(last_name)"expr2",
NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM employee

employees테이블에서 사원의 first_name,first_name의 길이,last_name,last_name의 길이와

last_name의 길이와first_name의 길이가 같으면 null을 다르면 first_name을 출력하라

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

컬럼 정보 확인  (0) 2015.02.24
계정별 권한주기  (0) 2015.02.24
SQL 명 정리  (0) 2015.02.24
대용량 데이터 밀어넣기  (0) 2015.02.24
DELETE 삭제했던 데이터 복구  (0) 2015.02.16
Posted by 타카스 류지
|

MYSQLDUMP 명령어를 사용해보시면 DB 가 안전하고 빠른것을 보실수 있어요.

앞으로 덤프명령어를 사용하시길 바라겠습니다.

C:\AutoSet\Server\mysql\bin>mysqldump -uroot -p table>table.sql

위처럼 입력을 하게되면 mysql 에 table 데이터베이스가 bin 폴더에
table.sql 로 저장되어 있는것을 보실수가 있습니다.

다시 mysqldump 받은 파일 table.sql 을 복구하시는명령어입니다.

C:\AutoSet\Server\mysql\bin>mysql -uroot -p table<table.sql

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

mysql root 패스워드 분실시  (0) 2019.02.22
Mysql 초성 검색 function(mssql function수정)  (0) 2016.04.15
MYSQL 접속 프로그램  (0) 2016.02.24
Posted by 타카스 류지
|