반응형
출처 ... | 준팅
원문 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
view에 사용되는 with check option  (0) 2006.10.20
오라클 아스키로 특수문자 업데이트  (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.20
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
오라클 아스키로 특수문자 업데이트  (0) 2006.10.16
반응형
출처 존재하는가? | 곰팅이얌
원문 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
ORA-01653  (0) 2006.10.02

+ Recent posts