반응형

요즘은 ORACLE 관련 글을 계속 적고 있네요.

요즘 사이트에서 사용하고 있는 DB가 ORACLE 이어서 그렇습니다. ^^

1. 오류 발생

오류가 아래와 같이 발생 하더라구요. 

SQL> drop index hr.JHIST_EMP_ID_ST_DATE_PK;
drop index hr.JHIST_EMP_ID_ST_DATE_PK
              *
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key

2. 오류와 관련 된 테이블 확인 하기 

SQL> column constraint_name format a30;
SQL> select constraint_name from all_constraints where index_owner = 'HR' and index_name = 'JHIST_EMP_ID_ST_DATE_PK';

CONSTRAINT_NAME
------------------------------
JHIST_EMP_ID_ST_DATE_PK

3. Drop Constraint

인덱스를 지우기 전에 Constraint를 먼저 수정 해야 합니다. 

SQL> alter table hr.job_history drop constraint JHIST_EMP_ID_ST_DATE_PK;

Table altered.

4. Drop index

이제 인데스를 지웁니다. 

SQL> drop index hr.JHIST_EMP_ID_ST_DATE_PK;

Index dropped.

오류 없이 잘 지워 집니다. 

잊어 버리지 않으려고 한글로 번역해서 ^^

감사합니다.

원본 출처 : How to Resolve ORA-02429: cannot drop index used for enforcement of unique/primary key - Ed Chen Logic

반응형
반응형

이 쿼리는 가끔 쓸일이 있는데 매번 잊어 버리는 것 같습니다. T.T

GRANT SELECT, DELETE, INSERT, UPDATE ON TARGET_TABLE TO TARGET_USER;

 

권한 주기 명령어는 일단 GRANT 입니다. 

그리고 권한의 내용으로 더 많이 있지만, 기본적으로 데이터 베이스 사용자가 가져야할 권한을 SELECT DELETE INSERT UPDATE가 되겠지요 ^^

TARGET_TABLE은 어느 테이블에 줄 것인가?

TARGET_USER 는 어느 사용자에게 줄 것인가?

입니다. 

문장을 잘 변경해서 사용함시면 되겠습니다. 

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

매번 할때마다 잊어버리는 쿼리네요 t.t

 INSERT INTO target_table (col1, col2, col3) SELECT col1, col2, col3 FROM source_table WHERE condition;

위와 같이 하면 되납니다. ^^

SOURCE_TABLE 이 가져올 테이블이고 , TARGT_TABLE 넣을 테이블 입니다.

COL1, COL2, COL3 는 원하는 컬럼을 넣으시면 됩니다.

테이블을 통째로 이동 시키고 싶으시면, WHERE 절은 빼시면 됩니다.

필요한 내용만 가져올 때는 WHERE 절에 원하는 검색식을 넣으시면 됩니다.

감사합니다.

반응형
반응형

오늘은 개발하다가 Oracle 페이징을 어떻게 했지를 잃어 버려서 ^^ 최근에는 MySQL만 계속 사용해서 Limit의 편안함은 ^^ 얼마나 좋은지 모릅니다.

저는 답만 알면 되어서 일단

옛날에는 Rownum 등을 이용해서 뭔가를 많이 해줬던 것 같은데, 프로젝트에서 다른 분들이 해놓은 쿼리를 찾아 보니 ^^

OFFSET 시작카운터-1 ROW FETCH FIRST 원하는줄수 ROWS ONLY

라고 되어 있는 것을 발견 했습니다.

실제로는

OFFET 0 ROW FETCH FIRST 20 ROWS ONLY

였습니다.

그래서 저는 눈치로 필요한 쿼리를 작성 했습니다.

SELECT A,B,C,D FROM TB_TESTPAGE ORDER BY A DESC OFFSET 0 ROW FETCH FIRST 20 ROWS ONLY

처럼 작성 했습니다.

그런데, 조금 상세한 내용이 궁금해서 찾아 봤습니다.

https://programmer93.tistory.com/4

예전 방식의 쿼리 입니다.

https://action713.tistory.com/entry/Oracle-FETCH-%EA%B5%AC%EB%AC%B8-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

요즘 방식의 쿼리에 대한 설명입니다.

저는 구현만 하면 되어서 설명 보다는 어떻게 사용했는지를 적었습니다.

하지만, 다른 분들은 친절하게 설명해주셨으니 읽어 보시면 도움이 될 것 같습니다.

감사합니다.

반응형
반응형






우선 문자열을 날자(날짜)로 바꾸는 함수는 TO_DATE로 아래 문서를 참조 하십시오.



http://talkit.tistory.com/346



오늘 설명할 함수는 날짜나 숫자를 문자열로 바꾸는 함수이다.


기본적인 사용법은 



TO_CHAR(날자또는숫자[,형식]);



우선 숫자형일 때는 


9 : 숫자지만, 빈자리를 공백으로 채움.

0 : 숫자지만, 빈자리를 0으로 채움.

, : 천단위의 콤마 (외국의 경우 소수점 일 수 있음.)

. : 소숫점 (외국의 경우 천단위를 나타낼 수 있음.)


실제로 123456을 문자열로 치환해 보면,


SELECT TO_CHAR(123456,'999,999,999,999') FROM DUAL


이렇게 하시면 


123,456 이라는 결과를 얻을 수 있습니다.


숫자를 이용해서  PK등을 만들어야 할때 LPAD를 사용해도 되겠지만,


SELECT TO_CHAR(12345, '00000000') FROM DUAL


이렇게 하면


00012345 라는 결과를 얻을 수 있습니다.



이번에는 날짜를 문자열로 치환할때 사용하는 형식 입니다.


YYYY 년

RRRR 년

MM 월

DD 일

HH 시간(12시)

HH24 시간(24시)

MI 분

SS 초


의 형식을 이용해서 원하는 형식으로 치환 할 수 있습니다.


MEMBER Table의 REG_DT 라는 필드가 날짜 형일때 다음과 같이 사용할 수 있습니다.


SELECT TO_CHAR(REG_DT, 'YYYYMMDD HH24:MI:SS') FROM MEMBER;


2017010 09:09:09 식의 결과를 얻을 수 있습니다.



즐거운 한주 되십시오.



반응형
반응형


ORACLE(오라클)에는 날짜를 표시하는 형이 DATE 형 입니다. 


그런데, 문자열로도 날짜를 표시 합니다. 


이때 해당 날짜에서 몇일을 뺀다 든지, 몇일을 더한다든지 또는 몇시간을 빼려면 어떻게 해야할까요.


가장 좋은 방법은 DATE 형으로 바꿔서 DATE 연산을 하는 것이 최선이겠지요 ^^


그래서 사용하는 함수가 TO_DATE 입니다.


사용법은 


TO_DATE(문자열,날짜패턴) 


입니다.


여기서 문자열은 '20161010 11:11:11' 같은 문자로 된 년월일시분초 정보입니다.


날짜 패턴은


YYYY : 4자리 년도


MM : 2자리 월


DD : 2자리 일


HH24 : 24시간 단위 시간


MI : 분


SS : 초


등입니다. 


좀 더 상세 한 내용은 https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i170559 URL에서 확인 하실 수 있습니다. 



실제 위의 문자열을 TO_DATE로 DATE 형으로 변환해 보면 아래와 같습니다. 


SELECT TO_DATE('20161010 11:11:11' , 'YYYYMMDD HH24:MI:SS') FROM DUAL


로 하시면 됩니다.


MySQL STR_TO_DATE 함수는 http://talkit.tistory.com/268 을 참조 하시면 됩니다.


감사합니다.




반응형
반응형


오늘은 ORACLE에서 문자열 길이를 젤 때 사용하는 LENGTH를 설명하려고 합니다.


최근에 우편번호 작업을 한적이 있습니다.


우편번호가 6자리에서 5자리로 바꼈죠 ^^;;


그래서 구 우편번호를 구해서 신 우편번호로 변경해 주는 작업을 했습니다.


그 때 오랫만에 LENGTH 함수를 사용했습니다.


사용 법은 



LENGTH(구하하고자하는 문자열) 



입니다.


우편번호가 여섯 자리이기 때문에 가상의 테이블 MEMBER에 들어 있는 우편번호가 6자리인 회원정보를 가져오는 쿼리 입니다. 그래서 6섯 자리를 5자리로 변환해 줘야겠지요. ^^;


SELECT * FROM MEMBER WHERE LENGTH(ZIPCODE) = 6


위와 같이 하시면, 6자리 우편번호를 가진 MEMBER의 모든 레코드를 가져옵니다.


가끔 기억이 안나기 때문에 적어 둡니다.


즐거운 하루 되십시오.



반응형
반응형





오랫만에 블로그에서 글을 씁니다.


C나 PHP의 경우는 SUBSTR 함수가 문자열의 시작값이 0 입니다.


하지만, 데이타베이스의 경우 보통 ORACLE, MySQL 등에서 사용할 때는 1부터 시작 합니다.



SUBSTR(문자열,시작 Index[, 글자수]);


기본 적인 사용 방법은 위와 같습니다.


저기서 글자 수 넣지 않으셔도 됩니다.


실제로 사용을 해보면,



SELECT SUBSTR('가야태자의IT이야기', 1) FROM DUAL 


위와 같이 하면 모든 문자열을 다 가져 옵니다.



SELECT SUBSTR('가야태자의IT이야', 2,2) FROM DUAL 


두번째 자리부터 2자리를 가져 옵니다.


야태

를 뱉습니다. 


끝으로 시작 인덱스를 -로 넣으셔도 됩니다. 그러면 뒤에서 그 자리수만큰 가져 옵니다.


SELECT SUBSTR('가야태자의IT이야', -3) FROM DUAL 


이렇게 하시면 결과 값은 

   이야기 

를 뱉습니다.


즐거운 하루 되십시오.


감사합니다.



반응형
반응형
오늘도 한 3시간 삽질을 했습니다.

프로그램을 한본 짰는데....

목록 프로그램인데

목록에 DATA가 안나오는 겁니다. ^^;;

T.T

분명히 smartSQL plus에서

DATA를 입력 했는데 말이죠

그런데 한 2시간쯤 뒤에

밑에 직원이

과장님 테이블 만들어 주세요

그리고, 값두 좀 넣어 주세요

라고 이야기를 했는데


그래서 제가 한것 하고 똑같이

값을 넣었습니다. ^^;;


그쪽에서도 안나온다는 것이 아니겠어요

혹시나 해서

smartSQL plus에서

SQL 창하나 더 열고

Commit;



이제 보인다는 겁니다.

혹시나 해서 제 목록 프로그램으로 갔습니다.



보이는 겁니다.


T.T

맨날 MySQL에 Informix만 다루다가

오랫만에 오라클을 다뤘더니

Commit

잊지 말자 Commit




반응형

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

[ORACLE] 문자열 길이를 구해보자 LENGTH  (0) 2016.12.07
[ORACLE] 문자열을 잘라보자 SUBSTR  (0) 2016.12.06
[ORACLE] LPAD 함수  (2) 2009.07.24
[ORACLE] RPAD 함수  (0) 2009.05.24
[ORACLE] 트리구조 만들기  (0) 2009.05.23
반응형
2009/05/24 - [DATABASE/ORACLE] - [ORACLE] RPAD 함수


사용법 : LPAD(변수,길이,변형자);

예)  SELECT LPAD('KOREA', 8, '*') FROM DUAL;
RESULT >>>>>>
***KOREA

좌측에 자리수 만큼 채워줍니다.

RPAD에서 써먹었던 예구용 ^^;;

LPAD는 솔직히

저 예 보다는

예2) SELECT LPAD('1', 8,'0') FROM DUAL
RESULT >>>>>>
00000001

이런식으로 써먹기 위한 것입니다. ^^;;

보통 제어번호 같은거 만들때 시퀀스로 순번을 만들고

char로 값을 채워넣는데 그때 0을 채워 주려면 프로그램을 써야 하지만,

DB에서 lpad를 사용하면 끝입니다.

^^;;

가끔 까먹어서 ^^;;

그리고, 이 글은 ㅋㅋㅋ

낚시성 글이기도 합니다.

요즘 유입 키워드에 RPAD가 있어서 ^^;;

ㅎㅎㅎ



반응형

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

[ORACLE] 문자열을 잘라보자 SUBSTR  (0) 2016.12.06
[삽질기] 잊지말자 Commit 명령  (0) 2010.01.15
[ORACLE] RPAD 함수  (0) 2009.05.24
[ORACLE] 트리구조 만들기  (0) 2009.05.23
[ORACLE] 오라클 계정 만들기  (0) 2009.05.21
반응형

1호점에서 퍼왔습니다.

사용법 : RPAD(변수,길이,변형자);

예)  SELECT RPAD('KOREA', 8, '*') FROM DUAL;
RESULT >>>>>>
KOREA***

우측에 자리수 만큼 채워줍니다.

가끔 까먹어서 ^^;;

반응형

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

[삽질기] 잊지말자 Commit 명령  (0) 2010.01.15
[ORACLE] LPAD 함수  (2) 2009.07.24
[ORACLE] 트리구조 만들기  (0) 2009.05.23
[ORACLE] 오라클 계정 만들기  (0) 2009.05.21
ORACLE scott 계정 활성화 하기  (0) 2009.05.20
반응형

1호점에서 가져왔습니다.

select level, lpad('>', level*2) || group_nm, group_exp
  from tpc_dept
start with dept_cd in (select dept_cd from tpc_dept where pre_dept_cd = '00000')
connect by  prior dept_cd = pre_dept_cd

오라클에서 지원하는 트리구조 함수 START WITH ~ CONNECT BY PRIOR  ~

^^;;

오늘 업무하다가 고객사의 과장님께 들은 것을 글로 옮겨 적는다. ^^;;
반응형

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

[ORACLE] LPAD 함수  (2) 2009.07.24
[ORACLE] RPAD 함수  (0) 2009.05.24
[ORACLE] 오라클 계정 만들기  (0) 2009.05.21
ORACLE scott 계정 활성화 하기  (0) 2009.05.20
[ORACLE] 테이블 구조만 백업 하기  (0) 2009.05.19
반응형

1호점에서 가져왔습니다.

ORACLE 새로운 계정 만들기

0. ORACLE sysdba 아이디로 접속하기
서버에 접속후에 oracle 계정으로 전환한다.

su - oracle

sqlplus로 sysdba 계정에 접속한다.

sqlplus sys/oracle[@orcl4] "AS SYSDBA"

1. 계정의 테이블 스페이스 생성
명령어
create tablespace [tablespace_name]
datafile '/home/oracle/oradata/DANBEE/[file_name].dbf' size 500m;

예)

create tablespace jw1 datafile='/home/oracle/oracle/oradata/orcl4/jw1.dbf' size 500m;

저기서 orcl4와 jw1 을 원하는대로 바꾸면 됨

2. 오라클 유저 만들기
명령어
CREATE USER [user_name]
IDENTIFIED BY [password]
DEFAULT TABLESPACE [tablespace_name]
TEMPORARY TABLESPACE TEMP;
예)

CREATE USER jw1 IDENTIFIED BY  jw1 DEFAULT TABLESPACE jw1 TEMPORARY  TABLESPACE TEMP;


 

3. 생성한 USER에 권한주기

GRANT connect, resource, dba TO [user_name];

예)
GRANT connect, resource, dba TO jw1

4. 생성한 USER로 ORACLE에 접속하기

sqlplus jw1/jw1[@orcl4]

SQL>

프롬프트가 나오면 USER 생성에 성공한 것이다.

참고 문서 : http://kin.naver.com/db/detail.php?d1id=1&dir_id=10110&docid=918052

반응형

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

[ORACLE] RPAD 함수  (0) 2009.05.24
[ORACLE] 트리구조 만들기  (0) 2009.05.23
ORACLE scott 계정 활성화 하기  (0) 2009.05.20
[ORACLE] 테이블 구조만 백업 하기  (0) 2009.05.19
[ORACLE] ORACLE Split 함수(Function)  (0) 2009.05.18
반응형
1호점에서 가져왔습니다.

 alter user scott identified by tiger account unlock;


오라클사는 보안 때문에 scott 계정을 비활성화 시켜 두었다

위와 같은 명령어를 사용하면 활성화 된 계정으로 사용할 수 있다.

tiger는 다른 비밀번호로 변경하면 된다. ^^;;
반응형

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

[ORACLE] 트리구조 만들기  (0) 2009.05.23
[ORACLE] 오라클 계정 만들기  (0) 2009.05.21
[ORACLE] 테이블 구조만 백업 하기  (0) 2009.05.19
[ORACLE] ORACLE Split 함수(Function)  (0) 2009.05.18
[ORACLE] 백업/복원하기  (0) 2009.05.17
반응형

1호점에서 가져왔습니다.

이문서는 << [ORACLE] 백업/복원하기 >> 에 추가 하는 문서 입니다.

오라클의 테이블 구조만 백업 하기 입니다.

exp userid=아이디/비밀번호@SID file=덤프파일명 rows=n log=로그파일명

이렇게 하면 DATA 없이 테이블 구조만 백업 됩니다.
반응형

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

[ORACLE] 트리구조 만들기  (0) 2009.05.23
[ORACLE] 오라클 계정 만들기  (0) 2009.05.21
ORACLE scott 계정 활성화 하기  (0) 2009.05.20
[ORACLE] ORACLE Split 함수(Function)  (0) 2009.05.18
[ORACLE] 백업/복원하기  (0) 2009.05.17
반응형
1호점에서 가져왔습니다.

우선 Table 타입을 선언합니다.

create or replace type split_tbl as table of varchar2(32767);
/

함수를 선언합니다.

create or replace function split
(
  p_list varchar2,
  p_del varchar2
) return split_tbl pipelined
is
  l_idx    pls_integer;
  l_list    varchar2(32767) := p_list;
  l_value    varchar2(32767);
begin
  loop
       l_idx := instr(l_list,p_del);
       if l_idx > 0 then
           pipe row(substr(l_list,1,l_idx-1));
           l_list := substr(l_list,l_idx+length(p_del));

       else
           pipe row(l_list);
           exit;
       end if;
  end loop;
  return;
end split;
/

사용법은

select * from table(split('1 2 3 4 5 6 7 8 9 10', ' '));

입니다.

출처 : http://builder.com.com/5100-6388-5259821.html

반응형

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

[ORACLE] 트리구조 만들기  (0) 2009.05.23
[ORACLE] 오라클 계정 만들기  (0) 2009.05.21
ORACLE scott 계정 활성화 하기  (0) 2009.05.20
[ORACLE] 테이블 구조만 백업 하기  (0) 2009.05.19
[ORACLE] 백업/복원하기  (0) 2009.05.17
반응형
1호점에서 옮겨 왔습니다.

오라클을 데이타 베이스로 사용하면서 백업하고 복원하는 방법입니다.

1. 백업하기 exp userid=사용자명/비밀번호@sid file=filename_date.dmp

  예) exp userid = scott/tiger@orcl file=scott_20070331.dmp

2 복원하기 imp userid=사용자명/비밀번호@sid file=filename_date.dmp [FULL=Y] [TABLE=table name]

  예) imp userid=scott/tiger@orcl file=scott_20070331.dmp FULL=Y
반응형

+ Recent posts