반응형
출처 ... | 준팅
원문 http://blog.naver.com/jun6739/110017203980
# 날짜계산
select months_between(sysdate,to_date(2007-12-22','yyyy-mm-dd')) 
-- months_between(A,B) = A-B/30
--select add_months(sysdate,4) -- 특정일의 달수 더한 날
--select next_day(sysdate,'friday') -- 특정일의 다음주 요일
--select last_day(sysdate) -- 특정일의 해당 월의 마지막 날
--select round(sysdate,'dd') -- 특정일의 반올림(오후면 다음날..)
--select trunc(sysdate,'ww') -- 특정일의 전주 토요일(해당 전주의 마지막 날)에해당하는 날짜
--select trunc(sysdate,'D') -- 특정일의 주 일요일(해당 주의 첫째 날)에해당하는 날짜

from dual
 

/* 어제 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE-1)+0.99999421
/* 오늘 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 0.99999421
/* 내일 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1) AND TRUNC(SYSDATE+1)+0.99999421
/* 금주 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'D') 
                        AND TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'D')+6.99999421
/* 차주 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+8)-TO_CHAR(SYSDATE, 'D') 
                        AND TRUNC(TRUNC(SYSDATE)+14.99999421)-TO_CHAR(SYSDATE, 'D')
/* 금월 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'DD') 
                        AND TRUNC(LAST_DAY(SYSDATE))+0.99999421
/* 전월 */ 날짜칼럼 BETWEEN TRUNC(ADD_MONTHS(SYSDATE,-1)+1)-TO_CHAR(SYSDATE,'DD') 
                        AND TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, -1)))+0.99999421
/* 차월 */ 날짜칼럼 BETWEEN ADD_MONTHS(TRUNC(SYSDATE),1)-TO_CHAR(SYSDATE,'DD')+1 
                        AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),1)+0.99999421)

 

 

# 특정일 까지의 간격을 년, 개월, 일로 표현하기

SELECT 
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(?', 'YYYYMMDD'))/12) "년", 
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(?', 'YYYYMMDD')) - 
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(?', 'YYYYMMDD'))/12) * 12) "개월", 
TRUNC((MONTHS_BETWEEN(SYSDATE,TO_DATE(?', 'YYYYMMDD')) - 
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(?', 'YYYYMMDD')))) * 30.5) "일" 
FROM DUAL;

 


# 당월의 주차 구하기..
SELECT 
?' as "날짜" 
, ceil((to_number(substrb(?', -2, 2)) + 7 - to_number(TO_CHAR(TO_DATE(?','YYYYMMDD'),'D')))/7) as "월별 주차" 
from dual; 


 

# 시간 계산 SQL 
SELECT TRUNC(TO_DATE(?','YYYYMMDDHH24MISS')-TO_DATE(?','YYYYMMDDHH24MISS')) || ' day ' || 
       TRUNC(MOD((TO_DATE(?','YYYYMMDDHH24MISS')-TO_DATE(?','YYYYMMDDHH24MISS')),1)*24) || ' hour ' || 
       TRUNC(MOD((TO_DATE(?','YYYYMMDDHH24MISS')-TO_DATE(?','YYYYMMDDHH24MISS'))*24,1)*60) || ' minute ' || 
       TRUNC(ROUND(MOD((TO_DATE(?','YYYYMMDDHH24MISS')-TO_DATE(?','YYYYMMDDHH24MISS'))*24*60,1)*60)) || ' sec ' 
       " Time Interval " 
FROM DUAL ;
 


출처 : oramaster.net
반응형
반응형

with grant option과 with admin option  

(둘다 실행 권한을 받은 user가 다시 실행 권한을 다른 user에게 줄 수 있게 해주는 option이다.) 
-- 차이는 with admin option으로 권한을 받은 user1이 다른 user2에게 권한을 부여한 후 user1으로부터 
  권한을 revoke하면 user1의 권한만 revoke되나 
  with grant option으로 부여하면 user1에게 revoke 될 시 user2의 권한도 cascade로 revoke된다. 


oracle@swsvrctr:/home/oracle> sqlplus internal 

SQL> col grantor format a10 
SQL> col grantee format a10 
SQL> col table_name format a10 
SQL> col table_schema format a10 
SQL> col privilege format a25 
SQL> grant create user to scott with admin option; ==> with admin option으로 권한 부여후 
SQL> connect scott/tiger 
SQL> grant create user to oracle; ==> 다시 oracle 에게 같은 권한 부여후 
SQL> connect internal 
SQL> select * from dba_sys_privs 
 2  where grantee in ('SCOTT','ORACLE'); 

GRANTEE    PRIVILEGE                 ADMIN_ 
---------- ------------------------- ------ 
ORACLE     CREATE USER               NO 
SCOTT      CREATE USER               YES 
SCOTT      UNLIMITED TABLESPACE      NO 

SQL> revoke create user from scott; ==> scott의 권한을 revoke 
SQL> select * from dba_sys_privs 
 2  where grantee in ('SCOTT','ORACLE'); 

GRANTEE    PRIVILEGE                 ADMIN_ 
---------- ------------------------- ------ 
ORACLE     CREATE USER               NO ==> scott의 create user 권한만 revoke되었다.  
SCOTT      UNLIMITED TABLESPACE      NO     oracle권한은 그대로 

SQL> grant select on dept to oracle with grant option; ==> with grant option 으로 권한 부여후 
SQL> connect / 
SQL> create user myuser identified by myuser1$ 
 2  default tablespace ts_user1 
 3  temporary tablespace temp; 

SQL> grant select on scott.dept to myuser; ==> 다시 같은 권한을 다른 myuser에게 부여 

Grant succeeded. 

SQL> select * from all_tab_privs 
 2  where table_name='DEPT'; 

GRANTOR    GRANTEE    TABLE_SCHE TABLE_NAME PRIVILEGE                 GRANTA 
---------- ---------- ---------- ---------- ------------------------- ------ 
SCOTT      ORACLE     SCOTT      DEPT       SELECT                    YES 
ORACLE     MYUSER     SCOTT      DEPT       SELECT                    NO 

SQL> revoke select on dept from oracle; ==> oracle의 권한을 revoke 

Revoke succeeded. 

SQL> select * from all_tab_privs           ==> with grant option으로 생성된 이하 myuser의 권한도 
 2  where table_name='DEPT';      revoke 되었다. 

no rows selected

 

 

===================================================================================

http://cafe.naver.com/jjuvva.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=287

푸뇽(edood)님 께서 작성하신 글입니다.

스크랩이 안되서 긁어왔습니다.

반응형
반응형

view를 통해 insert 가 되는데 with check option 을 사용 여부에 따라 뷰의 조건에 해당하는

데이터만 삽입,삭제,수정 할 수 있다.

 

--예제를 보시면 훨씬 쉽게 이해 하실 수 있을 겁니다.

 

ex)  

create table testtable
(empno number(10) ,
deptno number(10),
name varchar2(20))

tablespace users;

 

insert into testtable values(10,20,'abc');

insert into testtable values(20,30,'ccc');

  이런식으로 대충 몇개 쭈-욱 데이터를 넣어요!

 

이제 view를 만들어봅시다.

 

1. with check option을 사용하지 않은 view

create view testview2
as
select * from testtable where empno in (10,20,30,40);

 

2. with check option을 사용한 view

create view testview
as
select * from testtable where empno in (10,20,30,40)

with check option;

 

※ with check option 이 어떤 기능을 하는지 여기서 알수 있을 것입니다.

view를 통해서 insert가 가능 합니다.

 

먼저 with check option 을 사용하지 않은 view 를 통해서 insert를 해봅시다.

 

insert into testview2 values(10,20,'view_com');

select 문을 실행시키면 데이터가 입력된 것을 확인 할 수 있습니다.

select * from testview2;

(이것은 view는 테이블이 아니기 때문에 testview에 입력된 것이 아니라 testtable에 입력된 것입니다.)

 

insert into testview2 values(80,90,'view_com2');

이것도 역시 테이블에서 확인해 보면 정상적으로 삽입 된 것을 볼 수 있다.

(view에 제약조건이 걸려 있기 때문에 view에는 나타나지 않고 testtable에는 나타난 것을 확인합니다.)

여기까지 정상적으로 모든것이 insert가 된 것을 확인 할수 있을 겁니다.

 

이제, with check option을 사용한 view 를 통해서 insert를 해봅시다.

위에서 insert한 값과 똑같이 넣어 보겠습니다.

insert into testview values(10,20,'view_com'); 아무 이상없이 실행 될것입니다.

 

하지만 

insert into testview values(80,90,'view_com2');

ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다.

이런 오류가 나오시는 것을 볼 수 있을 것입니다.

 

결론을 내리자면 with check option은

view를 만들 때 해당 제약조건 안에서만 삽입,삭제,수정이 가능하다는 것입니다.

 

위 예제는 view를 만들 때 empno가 10,20,30,40인 것들만 가져오는 것이였습니다.

그런데 with check option을 쓴 view에

empno에 80인 데이터를 넣을려고 하니 오류메세지가 나오는 것입니다.

 

알고보면 굉장히 간단하고 쉬운건데 너무 제가 장황하게 설명한 것 같습니다.

저도 이것에 대해 몰랐습니다. 인터넷에 찾아봐도 확실한 대답이 없었던 터라 책도 찾아보고

인터넷 자료도 수집하면서 몇 시간을 고생했답니다. 근데 너무 간단하죠!^^ㅎㅎㅎ

반응형

'Oracle > Oracle Study' 카테고리의 다른 글

Row Migration  (0) 2008.11.30
10g Archive Mode로 변경  (0) 2008.10.01
Rollup & Cube & Grouping 차이  (0) 2008.05.16
with grant option & with admin option 차이  (0) 2008.05.14
오라클 아스키로 특수문자 업데이트  (0) 2006.10.16
반응형

사용자의 데이터가 저장되어 있는 테이블에 입력, 수정, 삭제작업을 수행하다 보면 자주 발생하는 에러현상이 있습니다. 이 현상은 테이블이 저장되어 있는 테이블스페이스의 공간이 부족한 경우에 주로 발생합니다.

 

• ORA-01653 에러코드가 발생하는 경우
• 테이블스페이스를 생성 또는 변경하거나 크기를 관리해야 경우


 

<ORA-01653 상황 만들기>

 

 1) 테스트를 위해 TEST 테이블스페이스를 생성하십시오. 
[C:\] sqlplus "/as sysdba" 
SQL> startup force 
SQL> create tablespace test 
datafile 'c:\oracle\oradata\ora92\test_01.dbf' size 3M; 
 
SQL> select tablespace_name, bytes, file_name from dba_data_files;


 2) TEST 테이블을 TEST 테이블스페이스에 생성하십시오. 
[C:\] sqlplus "/as sysdba" 
SQL> create table test(name char(30)) 
tablespace test 
storage(initial 2M);


 3) TEST 테이블이 생성되었으면 연속적으로 행들을 입력하여 익스텐트 확장 시 에러가 발생하도록 하십시오. 
SQL> declare
        x  number(2);
      begin
        for x in 1 .. 10000   loop
          insert into  test values('111111111111111111111111111111');
        end loop;
      end;
      /
SQL>  /
SQL>  /
SQL>  /         ← 익스텐트 에러가 발생할 때 까지 반복적으로 실행하십시오.
SQL>  /
declare
*
1행에 오류:
ORA-01653: SYS.TEST 테이블을 128(으)로 TEST 테이블스페이스에서 확장할 수
없습니다
ORA-06512: 줄 5에서


 

<ORA-01653 해결 방법>

 

4) 테이블스페이스의 크기가 부족하여 발생하는 에러를 해결하기 위해서는 해당 테이블스페이스에 새로운 데이터 파일을 추가하는 방법입니다. 
SQL> alter tablespace test
      add datafile 'c:\oracle\oradata\ora92\test_02.dbf' size 3M;

SQL> declare
        x  number(2);
      begin
        for x in 1 .. 10000   loop
          insert into  test values('111111111111111111111111111111');
        end loop;
      end;
      /
SQL>  select tablespace_name, bytes, file_name from dba_data_files;

SQL>  host  dir  c:\oracle\oradata\ora92  
→    "test_02.dbf" 파일의 존재여부와 파일 크기를 확인하십시오.

      test_01.dbf
      test_02.dbf
 
 5) 테이블스페이스의 크기를 늘리는 두 번째 방법은 기존의 데이터 파일을 RESIZE절로 늘리는 방법입니다. 
SQL> alter database 
     datafile 'c:\oracle\oradata\ora92\test_02.dbf'  resize 5M;

SQL> select tablespace_name, bytes, file_name from dba_data_files;
SQL> host  dir  c:\oracle\oradata\ora92
 
 6) 실습이 끝나면 TEST 테이블스페이스를 삭제하십시오. 해당 테이블스페이스 내에 관련 테이블이나 인덱스가 생성되어 있으면 테이블스페이스를 삭제할 수 없습니다. 
SQL>  drop tablespace test;
drop tablespace test
*
1행에 오류:
ORA-01549: 테이블스페이스가 비어있지 않으므로 INCLUDING CONTENTS 옵션
을 사용해 주십시오

SQL>  drop tablespace test including contents;

SQL>  select tablespace_name, bytes, file_name from dba_data_files;
SQL>  host  dir  c:\oracle\oradata\ora92
      test_01.dbf
      test_02.dbf
 
 7) 테이블스페이스를 삭제하더라도 관련 데이터 파일은 삭제되지 않습니다. 추가적인 작업을 통해 관련 데이터 파일을 함께 삭제하십시오. 
SQL>  host del c:\oracle\oradata\ora92\test_0*
SQL>  host dir  c:\oracle\oradata\ora92
SQL>  exit
 

 

 

http://www.dbguide.net/oracle/oracle_02.jsp 참조.

반응형

'Oracle > Oracle Error' 카테고리의 다른 글

ORA-14400  (0) 2010.04.01
ora-27476, ora-06512  (0) 2010.01.26
Linux Oracle9i Ora-01031:insufficient privileges  (0) 2008.11.19
Ora-32004, Ora-19905:10g Archive mode 설정 후 Error  (0) 2008.10.02
ORA-01653  (0) 2006.10.02
반응형
출처 pride FC | 효도르
원문 http://blog.naver.com/sungs6031/40026502455

UPDATE t SET A = REPLACE(A, CHR(9),'')
 WHERE A LIKE '%'||CHR(9)||'%';

 

CHR(44)     ,                   '||CHR(44)||'
CHR(39)     '
CHR(38)     &
CHR(9)      탭문자
CHR(13)     라인피드
CHR(10)     캐리지리턴

 

UNIX : CR
WIN : LF + CR

 

Ex) 웹브라우저에서 textarea에서 입력하였을때  '엔터' 찾기

      select * from table_name where 특정칼럼 like '%'||chr(13)||chr(10)||'%' ;
(출처 : 'sql 조회시 엔터키를 포함하고 있는 문자열을 어떻게 찾나요?' - 네이버 지식iN)

 

 

=====================================================================================

 

제 의견을 덧붙인다면...

 

레코드 값에 간혹 넣지도 않은 이상한 특수기호가 들어 있는 경우가 있을 것입니다.(ex. ♪)

저 8분음표 기호는 라인피드라고 하네요. 일일히 select 문을 쳐보면서 나온겁니다.

라인피드가 아직 정확하게 뭔지는 모르겠지만 어쨌든 찾았습니다.ㅎㅎㅎ

8분음표를 지우고 싶다면 update를 해주세요..

 

ex) update table_name set column_name = TRIM(chr(13) from column_name)

      where [조건문]

 

cf. TRIM은 없애주는 기능이라는 거 다 아시져!^^;; 하나의 문자만을 없애준다는게 단점!

     2개를 지우고 싶다면 update를 한 후 다시 한번 더 해주셔야 합니다.

반응형

'Oracle > Oracle Study' 카테고리의 다른 글

Row Migration  (0) 2008.11.30
10g Archive Mode로 변경  (0) 2008.10.01
Rollup & Cube & Grouping 차이  (0) 2008.05.16
with grant option & with admin option 차이  (0) 2008.05.14
view에 사용되는 with check option  (0) 2006.10.20
반응형
출처 존재하는가? | 곰팅이얌
원문 http://blog.naver.com/assembly1/150006411379

임의의 테이블(A)을 128(으)로 임의의(TS) 테이블스페이스에서 확장할 수 없습니다. 라는 에러메시지가 보이면 적용할 해결법이다.

 

**********************************************

UPDATE DBA_DATA_FILES
SET AUTOEXTENSIBLE = 'YES'
WHERE TABLESPACE_NAME='TS_ETSD'

 

DBA_DATA_FILES 뷰테이블이라 위의 문장은 실행할 수 없다(오라큰 문외한이기에 시도를...)

**********************************************

 

*********기존 테이블 스페이스 삭제*************

DROP TABLESPACE TS_ETSD (INCLUDING CONTENTS) ===> 테이블 스페이스에 정보가 있는 경우 추가되는 문장

 

*********새로운 테이블 스페이스 생성***********

CREATE TABLESPACE TS_ETSD
DATAFILE
  'C:\ORACLE\TS_ETSD.DBF' SIZE 1024M 
AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED BLOCKSIZE (8K)===> 다른 테이블 스페이스에 잡혀있는 블럭사이즈로 잡아야 에러(ORA-29339)가 발생하지 않는다.

 

==========================================================================================

BLOCKSIZE (8K) 가 아니라 BLOCKSIZE 8K로 하니깐 되더라고요! 
안되시는 분들은 괄호를 빼고 해보시길 바랍니다.^^

==========================================================================================

 

나의 조치...

 

테이블에 입력,수정,삭제작업을 여러번 수행을 하면 발생하는 에러 현상입니다.

이 에러는 저장되어 테이블 스페이스의 공간이 부족한 경우 자주 발생하는 것입니다.

 

해결하는 방법은 2가지 방법이 있습니다.

1. 테이블스페이스의 datafile을 하나 더 만들어 주는 것.

    alter tablespace 테이블스페이스 이름

      datafile ='저장될 datafile의 경로명' size 100m;

    ex) alter tablespace users

           datafile = 'c:\prod\disk5\user02.dbf' size 200m;

 

2. 테이블스페이스의 기존 datafile의 size를 늘려 주는 것.

    alter database 

      datafile ='저장될 datafile의 경로명' resize 100m;

 

    dbguide라는 곳에서 참조하였습니다.

자세한 내용은 http://www.dbguide.net/oracle/oracle_02.jsp 이곳에서 확인해 보시거나

저의 Oracle Study에 ORA-01653 에 대한 것만 참조해서 써 놓았습니다.

반응형

'Oracle > Oracle Error' 카테고리의 다른 글

ORA-14400  (0) 2010.04.01
ora-27476, ora-06512  (0) 2010.01.26
Linux Oracle9i Ora-01031:insufficient privileges  (0) 2008.11.19
Ora-32004, Ora-19905:10g Archive mode 설정 후 Error  (0) 2008.10.02
ORA-01653  (0) 2006.10.20

+ Recent posts