반응형

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
반응형

qorugh1 (2006-09-22 23:56 작성)  

저도 최근 안 것인데요

 

실행에서 regedit 를 친후

HKEY_LOCAL_MACHINE₩SOFTWARE₩Microsoft₩Windows₩CurrentVersion₩SharedDLLs 라는 것을 일단 잡습니다.

 

 그러면 옆에 많은 개체들이 뜨는데 그건 일단 보지 말고

 

 sharedDDLs를 오른쪽 클릭으로 사용권한을 클릭합니다

 

 그러면 창이 하나 뜨죠?

 

 거기서 고급을 클릭하면 부모개체 어쩌고 하는 것이 있습니다.

 

 그것을 체크해줍니다.

 

 그러고나서 확인만 누르면 끝납니다. 이제 모든것이 해결! 설치든 제거든 업데이트든 얼마든지 해보세요
 

(출처 : 'ms office 2000을 지우고 2003을 깔려고 하는데 오류가 나네요' - 네이버 지식iN)

 

 

★★ qorugh1 님의 글입니다.

반응형
반응형

집필자 : gene233  (2006-09-17 00:43)

 

노하우사전 분류 :  IT 
 
저도 이 문제때문에 지식인 검색을 해보고 했지만 마땅한 답변이 없는 것 같아

이것 저것 다 해보다 발견한 방법을 올려보려 합니다.

 

우선 인터넷을 띄우시면 주소표시줄 앞에 주소(D)라고 되어 있는 부분이 있습니다.

거기에 마우스포인트를 갖다대시고 오른쪽 클릭을 하면 팝업이 뜹니다.

 

그 팝업엔 기본적으로 표준단추/주소표시줄/연결/도구모음잠금/이동단추
(사용자에 따라서 백신프로그램이 있을 수도 있지만)
등이 있습니다.

 

그런데 거기에 만약 SEARCH(검색)프로그램이 함께 뜬다면, 그것을 지워줘야 합니다.

제 생각엔 다른 검색 프로그램이(예를 들면, 네이버 점프, searchMe 등등) 깔리면,

그 검색프로그램이 윈도우 익스플로러 검색기능을 대신하게 되어

윈도우인터넷옵션에서의 기능들이 안 먹히는 것 같습니다.

 

그래서 제어판에 가셔서 프로그램 추가/삭제에서 그 프로그램을 찾아 삭제해줍니다.

 

삭제될 때 떠 있던 인터넷창이 닫힐 것이고, 삭제가 다 된 후 인터넷을 열면 목록이

다 사라져 있을 것입니다.

 

도움 되셨길 바라며...


 
내용출처 : [직접 서술] 직접 서술

(출처 : '인터넷 익스플로러에서 주소창 목록 지우기' - 네이버 지식iN)

 

 

★★ gene233 님의 글이였습니다...

 

 

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

네이버에 물어봐서 다른 것들도 찾아봐서 해보았지만 효과를 못 보았습니다.
이 글을 읽고 나서 간단하게 프로그램만 지우면 된다는 것을 알았습니다.
위 글에 나와있는 프로그램들이 없으시다면 다른 방법을 찾아보세요!!

반응형
반응형
시작->실행
 
RunDll32 advpack.dll,LaunchINFSection %windir%\INF\msmsgs.inf,BLC.Remove
반응형
반응형
출처 존재하는가? | 곰팅이얌
원문 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