programing

오라클 11g에 무제한 문자를 저장하는 방법은 무엇입니까?

starjava 2023. 7. 26. 21:32
반응형

오라클 11g에 무제한 문자를 저장하는 방법은 무엇입니까?

Oracle 11g에 varchar2 열이 있는 테이블이 있습니다.이 열이 문자열로 정의된 전용 프로그래밍 언어를 사용합니다.이 열에는 최대 2000자(4000바이트)를 저장할 수 있습니다.이제는 열에 2000자 이상(사실상 무제한)을 저장해야 합니다.DBA는 유지보수를 위해 BLOB 또는 LONG 데이터 유형을 좋아하지 않습니다.

제가 생각할 수 있는 해결책은 원래 표에서 이 열을 제거하고 이 열에 대한 별도의 표를 가진 다음 각 문자를 한 줄로 저장하여 무제한 문자를 얻는 것입니다.이 테이블은 쿼리를 위해 원래 테이블과 결합됩니다.

이 문제에 더 좋은 해결책이 있습니까?

업데이트: 독점 프로그래밍 언어는 문자열과 블롭 유형의 변수를 정의할 수 있으며, CLOB 옵션은 없습니다.답변은 이해하지만 DBA를 맡을 수는 없습니다.저는 BLOB나 LONG에서 벗어나는 것이 개발자들의 악몽이 될 것이라는 것을 이해하지만, 그래도 어쩔 수 없습니다.

업데이트 2: 최대 필요한 문자가 8,000자인 경우, 각각 2,000자인 4개의 열을 추가하여 8,000자를 얻을 수 있도록 3개의 열을 추가하면 됩니다.따라서 첫 번째 열이 가득 차면 값이 다음 열로 오버플로됩니다.이 디자인이 나쁜 부작용을 일으킬까요?제안해 주세요.

블롭이 필요한 것이라면 DBA에게 필요한 것입니다.이러한 데이터 유형에는 이유가 있으며, 사용자가 직접 구현한 데이터 유형은 기본 제공 유형보다 더 열악합니다.

또한 CLOB 유형은 요구 사항을 잘 충족하기 때문에 확인해 보는 것이 좋습니다.

Oracle이 저장 프로시저를 정보 스키마에 저장하는 방법을 따를 수 있습니다.텍스트 열이라는 테이블을 정의합니다.

CREATE TABLE MY_TEXT (
IDENTIFIER INT, 
LINE       INT,
TEXT       VARCHAR2 (4000),
PRIMARY KEY (INDENTIFIER, LINE));

식별자 열은 원래 테이블의 외부 키입니다.줄은 텍스트 필드를 순서대로 유지하기 위한 단순 정수(순서가 아님)입니다.따라서 더 큰 데이터 청크를 유지할 수 있습니다.

예, 이것은 블롭, 클롭 또는 LONG만큼 효율적이지 않습니다(가능하다면 LONG 필드는 피하겠습니다).예, 이렇게 하려면 더 많은 유지 관리가 필요하지만, DBA가 데이터베이스의 CLOB 필드를 관리하는 것에 반대하는 경우 이 옵션이 두 번째 옵션입니다.

편집:

아래의 My_Table은 현재 확장하려는 VARCHAR 열이 있는 곳입니다.짧은 텍스트 필드는 표에 보관하겠습니다.

CREATE TABLE MY_TABLE (
INDENTIFER INT,
OTHER_FIELD VARCHAR2(10),
REQUIRED_TEXT VARCHAR(4000),
PRIMERY KEY (IDENTFIER));

그런 다음 쿼리를 작성하여 MY_TEXT 필드에서 LINE 순으로 두 테이블을 조인합니다.응용 프로그램은 문자열을 2000자 청크로 분할하여 줄 순서로 삽입해야 합니다.

저는 이것을 PL/SQL 절차로 할 것입니다.삽입 및 선택을 모두 수행합니다.PL/SQL VARCHAR 문자열은 최대 32K자까지 사용할 수 있습니다.필요에 따라 충분히 클 수도 있고 그렇지 않을 수도 있습니다.

하지만 다른 모든 사람들이 이 질문에 답하듯이, 저는 DBA에게 칼럼을 CLOB로 만들 것을 강력히 제안합니다.프로그램 관점에서 이는 BLOB이므로 관리가 간단합니다.

BLOB나 LONG은 안 된다고 하셨지만 CLOB는 어떻습니까? 4GB 문자 데이터입니다.

BLOB가 최고의 해결책입니다.그 밖의 모든 것은 편의성이 떨어지고 유지 관리에 더 큰 문제가 될 것입니다.

BFILE이 DBA를 위한 실행 가능한 대체 데이터 유형입니까?

이해가 잘 안 돼요.CLOB가 적합한 데이터베이스 데이터 유형입니다.만약 당신의 이상한 프로그래밍 언어가 8,000자의 문자열을 다룰 것이라면, 무엇이 그것을 CLOB에 쓰는 것을 막습니까?

좀 더 구체적으로, CLOB로 정의된 열에 8000자 문자열을 삽입하려고 하면 어떤 오류가 발생합니까(Oracle 또는 프로그래밍 언어에서).

언급URL : https://stackoverflow.com/questions/2976154/how-to-store-unlimited-characters-in-oracle-11g

반응형