이미 존재하는 값에 영향을 미치지 않고 열 속성을 변경하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/950134

문제

간단히 말해서 - Oracle DB에서, 나는 Presnet 값에 영향을 미치지 않고 Varchar2 (8) 인 varchar2 (16) 열을 만들고 싶습니다. 나는 이미 이것을 시도했고 이상한 일을한다.

내가 시도한 쿼리는 -Alter Table some_table modify (some_col varchar2 (16)); 그러나 위의 쿼리를 실행할 때 이미 테이블에 이미 존재하는 값 (전부는 아님)이 ' 0'이 추가되었습니다.

그렇다면 내가 원하는 것을하는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

실행중인 명령이 정확합니다.

보고있는 추가 캐릭터가 아직 존재하지 않습니까?

다른 팁

테이블의 원시 데이터가 변경되고 있다는 것은 의심의 여지가 있습니다. 귀하의 의견 중 일부는 귀하가 데이터를보고 처리하기 위해 SQLPLUS 이외의 도구 및 응용 프로그램을 사용하고 있음을 의미하므로 데이터를 어떤 방식 으로든 잘못 처리하는지 여부를 살펴 봐야한다고 생각합니다.

다음은 내가 당신이 한 일을 스트레이트 sqlplus로 재현하려고 시도한 예입니다. 기존 데이터에 널 바이트가 추가되지 않습니다.

SQL> create table foo (bar varchar2(8));

Table created.

SQL> insert into foo        
  2  select lpad(to_char(level),level)
  3    from dual 
  4    connect by level <=8;

8 rows created.

SQL> commit;

Commit complete.

SQL> select bar,dump(bar) from foo;

BAR
--------
DUMP(BAR)
--------------------------------------------------------------------------------
1
Typ=1 Len=1: 49

 2
Typ=1 Len=2: 32,50

  3
Typ=1 Len=3: 32,32,51

   4
Typ=1 Len=4: 32,32,32,52

    5
Typ=1 Len=5: 32,32,32,32,53

     6
Typ=1 Len=6: 32,32,32,32,32,54

      7
Typ=1 Len=7: 32,32,32,32,32,32,55

       8
Typ=1 Len=8: 32,32,32,32,32,32,32,56


8 rows selected.

SQL> alter table foo modify (bar varchar2(16));

Table altered.

SQL> select bar,dump(bar) from foo;

BAR
----------------
DUMP(BAR)
--------------------------------------------------------------------------------
1
Typ=1 Len=1: 49

 2
Typ=1 Len=2: 32,50

  3
Typ=1 Len=3: 32,32,51

   4
Typ=1 Len=4: 32,32,32,52

    5
Typ=1 Len=5: 32,32,32,32,53

     6
Typ=1 Len=6: 32,32,32,32,32,54

      7
Typ=1 Len=7: 32,32,32,32,32,32,55

       8
Typ=1 Len=8: 32,32,32,32,32,32,32,56

다른 것이 당신을 위해 작동하지 않으면 언제든지 다음을 수행 할 수 있습니다.

  1. 새 이름으로 새 열을 추가하십시오
  2. 업데이트를 사용하여 이전 열에서 새 열에서 새 값으로 복사하십시오.
  3. 이전 열을 삭제하십시오
  4. 새 열의 이름을 기존 이름으로 바꾸다

길고 번거롭고 무자비한 힘이지만 다른 방법으로는 할 수 없다면 작동합니다 ...

대부분 Dave Costa에 동의합니다. 데이터가 오래된 '8'크기라고 생각하는 캐시가있을 수 있습니다. "일부가 아닌"값을 말할 때 추가 0을 얻습니다. 일관된 요인은 무엇입니까? 그것들은 모두 같은 길이 (예 : 7-8 자)입니까? 아니면 Alter 열이 완료되는 동안 또는 일부 SRVER 재시작 전에 삽입되었을 수 있습니까?

솔루션은 없지만 며칠 전에 비슷한 일이 발생했습니다. 여기. 어쩌면 메모를 비교하려고 노력할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top