VARCHAR2 (1)이되어야하는 열에 CLOB 데이터 유형을 사용하는 것은 매우 나쁜 생각입니다. 오라클은4000 문자의 인라인 CLOB를 VARCHAR2로 처리하므로 오히려 오버 헤드를 제외하고 스키마에서 데이터를 가장 정확하게 표현하기 위해 노력해야합니다. 이는 단지 좋은 습관 일뿐입니다.
이것은 실제로 DevArt 도구의 문제이거나 사용법에 대한 이해 (불쾌감 없음)처럼 보입니다. 엔티티 속성의 데이터 유형 및/또는 오라클의 물리적 데이터 유형에 이러한 스펙을 매핑하는 방법을 지정하는 방법이 있어야합니다. 조금 애매한 것 같아 사과드립니다. 제품에 익숙하지 않습니다.
SQL> desc t69
Name Null? Type
----------------------------------------- -------- --------
COL1 CLOB
SQL>
SQL> alter table t69 modify col1 varchar2(1)
2/
alter table t69 modify col1 varchar2(1)
*
ERROR at line 1:
ORA-22859: invalid modification of columns
SQL>
우리는 테이블 구조를 변경하는 DDL을 사용하여 문제를 해결할 수 있습니다
그래서,이 기본적인 문제입니다. 스키마에는 이러한 열이 많기 때문에 프로세스를 자동화하는 것이 좋습니다. 이 함수는 기존 열을 삭제하고이를 VARCHAR2로 다시 작성합니다. CLOB 컬럼의 데이터를 VARCHAR2 컬럼으로 이주하는 옵션을 제공합니다. 당신은 아마 이것을 필요로하지 않지만, 완벽을 위해 거기에 있습니다. (이것은 생산 품질 코드가 아닙니다 - 그것은 NULL NOT 제약 조건을 관리하는 오류 처리 등이 필요),이 프로 시저를 호출
SQL> exec clob2vc ('T69', 'COL1', 1)
PL/SQL procedure successfully completed.
SQL> desc t69
Name Null? Type
----------------------------------------- -------- ---------------
COL1 VARCHAR2(1)
SQL>
을 자동화 할 수 있습니다 ...의 그 열을 변경할 수 그래서
create or replace procedure clob2vc
(ptab in user_tables.table_name%type
, pcol in user_tab_columns.column_name%type
, pcol_size in number
, migrate_data in boolean := true)
is
begin
if migrate_data
then
execute immediate 'alter table '||ptab
||' add tmp_col varchar2('|| pcol_size|| ')';
execute immediate
'update '||ptab
||' set tmp_col = substr('||pcol||',1,'||pcol_size||')';
end if;
execute immediate 'alter table '||ptab
||' drop column '|| pcol;
if migrate_data
then
execute immediate 'alter table '||ptab
||' rename column tmp_col to '|| pcol;
else
execute immediate 'alter table '||ptab
||' add '||pcol||' varchar2('|| pcol_size|| ')';
end if;
end;
/
또는 일반적인 방법으로 스크립트.
출처
2011-04-20 13:55:16
APC
나는이 도구에 아직 익숙하지 않다. 나는 당신이 데이터베이스를 생성하기 전에 필드에 대해 원하는 데이터 유형을 지정할 수 있다는 것을 너무 늦게 깨닫는다. 그러나 나는 이미 그때까지 많은 시간을 투자했다. – Extrakun