programing

테이블 열에 대한 Oracle의 비트 데이터 유형

showcode 2023. 6. 19. 21:49
반응형

테이블 열에 대한 Oracle의 비트 데이터 유형

은 Oracle을 .bittrue 시나리오에 기타 유형.true/false 파일 형식입니다.사용자가 다음을 사용합니까?char(1)문화적인 특정 문제에 상관없이 예/참을 나타내기 위해 특정 문자를 사용하여 필드를 대신합니다.

에 에.char으로 해야 ?Number(1,0)대신 이에 대해 - 0은 거짓으로 간주됩니다 / 아니요, 사실로 해석되는 다른 것은 없습니까 / 네?

이것이 실행 가능합니까?


Oracle이 단순 부울 형식을 지원하지 않는 이유는 무엇입니까?

을 합니다.CHAR(1) 리고만을허제조약건는하용그▁only조만 허용하는 제약 .1그리고.0.

...

col CHAR(1),
CONSTRAINT cons_atable_col1 CHECK (col1 IN ('1','0'))

저는 영어 원어민이 아니라서 1과 0 또는 '1'과 '0'을 사용하는 편입니다.영어로 코딩하지 않으면 'Y'와 'N'을 사용하는 것은 거의 의미가 없습니다(네, 모국어 코딩이 존재합니다).'SI'와 'NO' 또는 'S'와 'N'을 사용하는 것은 전문적인 것처럼 보이지 않습니다(악센트가 있는 문자로 변수의 이름을 지정하는 것과 같습니다)반대로 C, PHP 또는 JavaScript로 코딩했다면 1과 0은 상당히 표준적입니다.어떤 경우에도 다른 문자를 허용하지 않도록 항상 적절한 제약 조건을 추가합니다.주관적인 문제는 차치하고, CHAR나 NUMBER를 선택하는 것은 눈에 띄는 성과가 없다고 생각합니다.인용할 필요가 없어서 숫자가 조금 더 좋아요 :)

저는 그것이 명백한 누락이라는 것에 동의하지만 저는 몇몇 오라클 포럼에서 그 주제에 대한 심각하게 열띤 토론을 읽었습니다; 그것은 일종의 종교적 문제입니다.일부에서는 부울이 응용 프로그램 데이터 유형에 속하며 데이터베이스 코어에 위치하지 않는다고 주장합니다.솔직히, 저는 우리가 그것 없이 너무 오래된 것들 중 하나라고 생각합니다. 우리가 그것을 의도적이라고 말하는 것이 더 나을 것입니다.

참고로 MySQL은 부울 형식을 가지고 있지만 TINYINT(1)와 동의어이므로 결국 1과 0과 같으며, 1과 0으로 평가되는 상수 TRUE와 FALSE도 있기 때문에 괜찮습니다.

다음은 톰에게 물어보기 주제에 대한 토론입니다.문제에 대한 Oracle 중심의 관점을 제공합니다.

스토리지의 경우 char(1)이 실제로 좀 더 효율적입니다(장난 의도는 없습니다).

SQL> CREATE TABLE xx (c CHAR(1), n NUMBER);

Table created

SQL> insert into xx values('T', 1);

1 row inserted

SQL> select dump(c), dump(n) from xx;

DUMP(C)             DUMP(N)
------------------- -------------
Typ=96 Len=1: 84    Typ=2 Len=2: 193,2

저는 숫자(1)보다 문자(1)를 선호합니다. 왜냐하면 문자를 합리적으로 선택할 수 있기 때문입니다. 어떤 문자가 부울적인 의미를 가지고 있는지는 분명하기 때문입니다.

물론 모든 다양한 변형과 싸워야 합니다. 하나를 선택하고 열에 체크 제약 조건을 적용하여 사용할 수 있도록 해야 합니다.

다른 도구에서 스키마를 생성하면 일관성 문제가 해결되는 경우가 종종 있습니다.저는 개인적으로 이런 목적으로 겨울잠을 자는 것을 선호하지만, 그것은 매우 구체적인 상황입니다.

그리고 물론 그것은 명백한 의무입니다.설상가상으로 PL/SQL에는 부울이 있지만 SQL 문에는 사용할 수 없습니다.

본 Oracle 가이드에 따르면 NUMBER(3)를 사용해야 합니다.미쳤지만, 사실입니다.

http://docs.oracle.com/cd/B19306_01/gateways.102/b14270/apa.htm

숫자(1)가 문자(1)보다 크지 않습니다.특히 기존의 char(1)에 추가될 경우에는 더욱 그렇습니다.그것은 혼란을 가중시킬 뿐입니다.

FWIW, 내부 뷰(예: USER_TAB_COLUMN)의 Oracle은 varchar2(3)(YES 및 NO)를 사용합니다.하지만 그들이 여기서 100% 일관성이 있는지는 확실하지 않습니다.

질문은 오래되었지만 최신 Oracle 릴리스가 사용되기 전까지는 여전히 유효한 질문입니다.

나는 이런 방법으로 문제를 해결할 것입니다: true/false와 현지화된 표시 텍스트(예: T$KEYWARDS ITEMNO ITEMTEXTEXT_DE ITEMTEXT_FE ... 0 False Falsch 1 TrueWahr)에 대한 가능한 값을 포함하는 테이블을 만듭니다.

참/거짓 대신 선택됨, 선택되지 않음 등을 선택할 수도 있습니다.

그런 다음 이 표에 열에 8개 키를 추가합니다.그러면 유효한 값만 있고 현지화에 따라 값이 변경되지 않습니다.

또 다른 좋은 솔루션인 iho는 데이터 열에 체크 제약 조건을 사용하고 있습니다.클라이언트의 현지화에 따라 동일한 데이터베이스/열에서 값이 다를 수 있는 경우에는 이 OFC가 작동하지 않습니다.

alter table tblLocations add flag number CONSTRAINT <constraintname> CHECK (flag IN (1,0));

Oracle은 내부적으로 서로 다른 Data Dictionary 보기에서 "비트"(데이터 유형 자체가 아님)를 사용합니다.

예를 들어 dba_users 보기의 내용은 다음과 같습니다.

..
        , DECODE (BITAND (u.spare1, 128), 128, 'YES', 'NO')
..
        , DECODE (BITAND (u.spare1, 256), 256, 'Y', 'N')
..

어떻게든 해결할 수 있는 방법을 보여줍니다."boolean" 비트를 자주 수정할 필요가 없는 경우 Oracle 6 이후와 동일한 접근 방식을 사용할 수 있습니다(최소한).숫자 열과 그 위에 BITAND 연산의 복잡성을 숨기는 뷰가 있는 테이블을 만듭니다.

ps. 참고로 Oracle JDBC에는 "비트" 데이터 유형 https://docs.oracle.com/cd/E16338_01/appdev.112/e13995/oracle/jdbc/OracleTypes.html#BIT 이 있으며 PL/SQL에도 부울이 있다는 것을 이미 알고 있습니다.비록 그것이 당신에게 큰 도움이 되지는 않겠지만요.귀하의 경우에 적합한 경우 위의 BITAND 접근법을 참조하십시오.

https://docs.oracle.com/cd/E17952_01/refman-5.5-en/char.html enter image description here

DCookie가 말했듯이 char(1)이 더 효율적입니다.VARCHAR2(VARCHAR)가 비어 있으면 1바이트가 포함되지만 1문자를 저장하면 1바이트 크기 + 1바이트 크기 --> 2바이트는 1문자를 저장해야 합니다.

언급URL : https://stackoverflow.com/questions/2426145/oracles-lack-of-a-bit-datatype-for-table-columns

반응형