CLOB 대 VARCHAR2 및 다른 대안이 있습니까?
저는 애플리케이션에 DevArt의 dotConnect와 Entity Developer를 사용하고 있습니다.Entity-First 기능을 사용하여 테이블을 만들었습니다.
많은 열 유형이 CLOB로 설정되어 있습니다.저는 MySQL과 Microsoft SQL Server만 사용한 경험이 있기 때문에 CLOB를 응용 프로그램에 사용하는 것에 대해 잘 모르겠습니다.제가 좀 읽어봤는데, CLOB는 큰 데이터 덩어리를 위한 것이라는 것을 발견했습니다.
질문은 다음과 같습니다.
사용자의 성별(1) 또는 전체 이름과 같은 대부분의 필드에 CLOB를 사용하는 것이 가능합니까?CLOB 필드를 VARCHAR2로 변환하는 단계는 컬럼을 드롭한 후 다시 생성해야 하며 DevArt의 Entity Explorer에서 버그가 발생하므로 가능하면 피하고 싶습니다.편집: 문자열 필드의 최대 길이를 설정하면 자동으로 VARCHAR2가 된다는 것을 방금 알았습니다.
오라클에 TINYTEXT와 동등한 것이 있습니까?
VARCHAR2(1)이어야 하는 열에 CLOB 데이터 유형을 사용하는 것은 매우 나쁜 생각입니다.오버헤드(Oracle이 4000자 미만의 인라인 CLOB를 VARCHAR2로 처리하기 때문에 실제로는 최소)를 제외하고, 우리는 항상 스키마에서 데이터를 가장 정확하게 표현하기 위해 노력해야 합니다. 단지 모범 사례일 뿐입니다.
이것은 DevArt 도구 또는 사용 방법에 대한 이해에 문제가 있는 것처럼 보입니다(위반하지 않음).엔티티 속성의 데이터 유형을 지정하거나 이러한 사양을 Oracle의 물리적 데이터 유형에 매핑할 수 있는 방법이 있어야 합니다.제가 제품에 익숙하지 않아서 조금 애매하다면 사과드립니다.
이것이 기본적인 문제입니다.
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 제약 조건 관리 등이 필요합니다.)
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;
/
그럼 열을 바꾸자꾸나...
SQL> exec clob2vc ('T69', 'COL1', 1)
PL/SQL procedure successfully completed.
SQL> desc t69
Name Null? Type
----------------------------------------- -------- ---------------
COL1 VARCHAR2(1)
SQL>
이 절차 호출은 일반적인 방법으로 자동화되거나 스크립트로 작성될 수 있습니다.
해서 CLOB와 을 하는 것.Gender
열은 최소한 매우 비정상적입니다.이 도구가 생성하는 DDL이 LOB 데이터를 오프라인이 아닌 인라인으로 저장하도록 지정하는 경우 심각한 성능 문제가 발생하지 않을 것으로 예상됩니다.그러나 LOB를 특별히 잘 처리하지 못하는 데이터베이스에 액세스하는 다른 도구에 문제가 발생할 수 있습니다.
에는 Oracle과 한 기능이 .Tinytext
MySQL. CLOB. CLOB.
더 간단한 솔루션은 모델 탐색기 -> 모델로 이동하는 것입니다.Store -> Tables/Views, 필요한 열을 찾아 이 필드의 유형을 VARCHAR2로 변경합니다.
그런 다음 모델에서 데이터베이스 업데이트 마법사를 실행하여 데이터베이스에 대한 변경 사항을 유지합니다.
MaxLength 패싯을 설정하는 것을 잊지 마십시오(그러나 문제는 다가오는 베타 빌드에서 이미 해결되었습니다).
언급URL : https://stackoverflow.com/questions/5731301/clob-vs-varchar2-and-are-there-other-alternatives
'programing' 카테고리의 다른 글
자바스크립트/jQuery에서 객체의 속성을 가져오는 방법은? (0) | 2023.08.28 |
---|---|
JSON 시간 초과 처리 가져오기 (0) | 2023.08.28 |
오류 처리(ex 발송).고객에게 보내는 메시지) (0) | 2023.08.23 |
jQuery 데이터 테이블:3자를 입력하거나 버튼을 클릭할 때까지 검색 지연 (0) | 2023.08.23 |
data-false="false"는 실제로 무엇을 합니까? (0) | 2023.08.23 |