sqlplus를 이용해서 원격으로 DB서버에 접속하는 방법.


sqlplus ID/PASSWORD@IP주소:포트번호/SID


shell로 만들어서 실행 시키는 방법

sqlplus ID/PASSWORD@IP주소:포트번호/SID << EOF

update .....  ;

delete ......   ;

insert ....    ;

commit;

exit

EOF


'sql' 카테고리의 다른 글

Oracle hr 확인  (0) 2015.03.06
오라클 월 마지막날 첫째날 구하기  (0) 2014.09.12
그룹함수 NTILE  (0) 2014.08.01
sqlite에서 rownum기능.. LIMIT  (0) 2014.07.31
yyyymmdd를 종종 yyyy-mm-dd로 표현해야 할때..  (0) 2014.07.17
Posted by 무세1
,

Oracle hr 확인

sql 2015. 3. 6. 01:45

처음 설치시 oracle password :  system/oracle


계정접속후 SID 확인

show parameter instance_name
select instance_name from v$instance;


SID 확인

lsnrctl services




alter user hr identified by hr account unlock;


alter user hr identified by hr;



alter system set sec_case_sensitive_logon=false;


'sql' 카테고리의 다른 글

sqlplus shell에서 실행하기.  (0) 2017.02.15
오라클 월 마지막날 첫째날 구하기  (0) 2014.09.12
그룹함수 NTILE  (0) 2014.08.01
sqlite에서 rownum기능.. LIMIT  (0) 2014.07.31
yyyymmdd를 종종 yyyy-mm-dd로 표현해야 할때..  (0) 2014.07.17
Posted by 무세1
,

오라클에서 제공하는 날짜 함수중 월의 마지막날을 구하는 LAST_DAY 함수가 있다.

> SELECT  TO_CHAR(LAST_DAY(SYSDATE),'YYYYMMDD') MONTH_LAST_DAY FROM DUAL


MONTH_LAST_DAY

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

20140930


그러면 월의 첫째날은 어떻게 구해야 할까?

월의 마지막 날에서 하루를 더하면 다음달의 첫날이 된다. 그리고 ADD_MONTHS 라는 함수를 이용해서 한달을 빼면 월의 첫째날을 구할 수 있다.

> SELECT  TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE)+1,-1),'YYYYMMDD') MONTH_FIRST_DAY

FROM    DUAL


MONTH_FIRST_DAY

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

20140901


* 이 방법이 더 단순하네요..

select  trunc(sysdate,'MM') from dual;


'sql' 카테고리의 다른 글

sqlplus shell에서 실행하기.  (0) 2017.02.15
Oracle hr 확인  (0) 2015.03.06
그룹함수 NTILE  (0) 2014.08.01
sqlite에서 rownum기능.. LIMIT  (0) 2014.07.31
yyyymmdd를 종종 yyyy-mm-dd로 표현해야 할때..  (0) 2014.07.17
Posted by 무세1
,

그룹함수 NTILE

sql 2014. 8. 1. 17:54

NTILE이라는 그룹함수는 특정 컬럼을 n개만큼 구분해 준다.

WITH T AS (

    SELECT  '2014125'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014455'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014532'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014234'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014765'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014321'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014012'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014056'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014089'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014022'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014044'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014055'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014011'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014442'  EMP_NO FROM DUAL UNION ALL

    SELECT  '2014232'  EMP_NO FROM DUAL

)

SELECT  EMP_NO

        , NTILE(3) OVER ( ORDER BY EMP_NO) GRP3

        , NTILE(4) OVER ( ORDER BY EMP_NO) GRP4

        , NTILE(5) OVER ( ORDER BY EMP_NO) GRP5

        , NTILE(6) OVER ( ORDER BY EMP_NO) GRP6

FROM    T


실행결과는..

2014011 1 1 1 1

2014012 1 1 1 1

2014022 1 1 1 1

2014044 1 1 2 2

2014055 1 2 2 2

2014056 2 2 2 2

2014089 2 2 3 3

2014125 2 2 3 3

2014232 2 3 3 3

2014234 2 3 4 4

2014321 3 3 4 4

2014442 3 3 4 5

2014455 3 4 5 5

2014532 3 4 5 6

2014765 3 4 5 6


Posted by 무세1
,

SQLite는 오라클에서 제공하는 rownum 기능이 없다..


대신 limit라는 기능을 제공한다..


SELECT    COL1, COL2

FROM    TAB01

ORDER BY  COL1

LIMIT 5

--5개 ROW를 출력하라는 의미


또하나 OFFSET 이라는 기능도 있다


SELECT    COL1, COL2

FROM    TAB01

ORDER BY  COL1

LIMIT 6 OFFSET 3

--3ROW를 건너뛰고 6개를 출력하라는 의미

 

Posted by 무세1
,

20140717 값을 종종 2014-07-17 바꿔는 경우가 있다..

YYYYMMDD  -> YYYY-MM-DD


WITH T AS (

    SELECT '20140717' DD FROM DUAL

)

SELECT  DD

        , SUBSTR(DD, 1, 4)||'-'||SUBSTR(DD, 5, 2)||'-'||SUBSTR(DD, 7) DD1

        , TO_CHAR(TO_DATE(DD, 'YYYYMMDD'), 'YYYY-MM-DD') DD2

        , REGEXP_REPLACE(DD, '(....)(..)(..)', '\1-\2-\3') DD3

FROM    T  


보통 SUBSTR이나 TO_CHAR를 많이 사용 했으나..

정규식으로 표현하는 방법도 있다..

'sql' 카테고리의 다른 글

그룹함수 NTILE  (0) 2014.08.01
sqlite에서 rownum기능.. LIMIT  (0) 2014.07.31
NULL값 정렬 order by nulls first, last  (0) 2014.04.01
group by에서 문자열 합치기...  (3) 2014.03.31
오라클 년별, 월별 주차 계산...  (0) 2014.03.21
Posted by 무세1
,

오라클에서 정렬시 NULL값은 마지막에 정렬된다..  

NULL값을 처음에 정렬되게 하려면..  

ORDER BY 컬럼 NULLS FIRST


WITH T AS (

SELECT  2500 AS COL1 FROM DUAL UNION ALL

SELECT  NULL AS COL1 FROM DUAL UNION ALL

SELECT  1000 AS COL1 FROM DUAL UNION ALL

SELECT  23   AS COL1 FROM DUAL UNION ALL

SELECT  NULL AS COL1 FROM DUAL

)

SELECT  * FROM T

ORDER BY COL1


 결과는

  23

1000

2500

NULL

NULL


ORDER BY 컬럼 NULLS FIRST

SELECT  * FROM T

ORDER BY COL1 NULLS FIRST

 결과는

NULL

NULL

23

1000

2500


NULLS LAST 를 쓰면.. NULL을 마지막에 정렬시킨다..

안쓴 경우와 동일한 결과가 나온다..

Posted by 무세1
,

아래내용은 구루비 커뮤니티(오라클클럽) 에서 퍼옴..   

http://www.gurubee.net/article/55512


오라클 버전별로 버전이다..

WITH T(TYPE, NAME, CODE) AS

(

SELECT '과일', '사과', '0' FROM dual

UNION ALL SELECT '과일', '레몬', '1' FROM dual

UNION ALL SELECT '과일', '포도', '2' FROM dual

UNION ALL SELECT '과일', '참외', '3' FROM dual

UNION ALL SELECT '채소', '오이', '0' FROM dual

UNION ALL SELECT '채소', '당근', '1' FROM dual

UNION ALL SELECT '채소', '호박', '2' FROM dual

)

SELECT type

     , SUBSTR(XMLAGG(XMLELEMENT(X, ',', NAME) ORDER BY CODE).EXTRACT('//text()'), 2) NAME_9I

     , WM_CONCAT(NAME) NAME_10G

     , LISTAGG(NAME, ',') WITHIN GROUP(ORDER BY CODE) NAME_11G

  FROM t

 GROUP BY type

 ORDER BY type

;


결과는.. 다음과 같다..

TYPE    NAME_9I                 NAME_10G                NAME_11G
과일     사과,레몬,포도,참외    사과,참외,포도,레몬 사과,레몬,포도,참외
채소     오이,당근,호박    오이,호박,당근        오이,당근,호박


참고로..

MySql

SELECT type

     , group_concat(name ORDER BY code) name_MySQL

  FROM t

 GROUP BY type

 ORDER BY type

MsSQL

SELECT type

     , STUFF((SELECT ',' + name

                FROM t

               WHERE type = a.type

               ORDER BY code

                 FOR XML PATH('')

              ), 1, 1, '') name_MSSQL

  FROM t a

 GROUP BY type

 ORDER BY type




Posted by 무세1
,

날짜가 몇주인주 계산해야 하는 경우가 있다.


그때 다음과 같이 구할수 있따..


SELECT  TO_CHAR(TO_DATE('20131231'),'WW') FROM DUAL;

-> 53

SELECT  TO_CHAR(TO_DATE('20131231'),'IW') FROM DUAL;

-> 01

WW : 해당해의 1일부터 7일단위로 끊어서 주차를 생성

IW   : 날짜 해당한 주가 하루라도 다음해인 경우에는 그해의 첫주가 됨.


SELECT  TO_CHAR(TO_DATE('20140115'),'W') FROM DUAL;

-> 3

SELECT  TO_CHAR(TO_DATE('20140215'),'W') FROM DUAL;

-> 4

W : 해당월의 주차를 구함



Posted by 무세1
,

Join문을 이용해서 update시..  헷깔리는 경우가 많다..


테이블1  TAB1 ( KEY, COL1)

테이블2  TAB1 ( KEY, COL2)


테이블1의 컬럼 COL1에  테이블1과 테이블2의 KEY값이 동일한 경우 COL2를 업데이트 하는 경우.


JOIN을 이용하지 않는 경우..  

UPDATE TAB1 A 

SET     COL1 = ( SELECT COL2 

                         FROM TAB2

                         WHERE   KEY = A.KEY );


JOIN을 이용하는 경우에는

/*+ BYPASS_UJVC  */  라는 힌트를 이용해서 UPDATE한다.

UPDATE  /*+ BYPASS_UJVC  */

(

    SELECT  A.COL1   COL1

                , B.COL2   COL2

    FROM   TAB1 A

               , TAB2 B

    WHERE   A.KEY = B.KEY

)

SET COL1 = COL2

INNER JOIN 한 후에, 수정할 필드 COL1과 대상 필드 COL2를 조회해서 UPDATE한다.


OUTER JOIN한 후에, UPDATE를 해야 하는 경우에는 

    WHERE   A.KEY = B.KEY(+)

 OUTER JOIN을 해서 UPDATE가 가능하다.



SQL Server에서는..  join update가 좀더 쉽다..  아마도.. ^^

UPDATE  TAB1

SET        COL1 = B.COL2

FROM     TAB1 A INNER JOIN TAB2 B ON A.KEY = B.KEY




'sql' 카테고리의 다른 글

group by에서 문자열 합치기...  (3) 2014.03.31
오라클 년별, 월별 주차 계산...  (0) 2014.03.21
SQL문에서 like 검색.. escape  (0) 2014.03.19
매월 첫번주 월요일 구하기...  (0) 2014.03.17
오라클 TRUNC 함수..  (0) 2014.03.17
Posted by 무세1
,