C#: OracleDb와 Oracle 데이터 유형의 동등성유형
상황:
나는 오라클을 사용하는 앱을 C#에서 만들고 있습니다.데이터 액세스.클라이언트(11g) - 저장 프로시저를 사용하여 Oracle 데이터베이스에서 특정 작업을 수행합니다.Oracle 데이터 유형이 포함된 특정 열거형(OracleDbType)이 있다는 것은 알고 있지만 특정 유형에 대해 어떤 것을 사용해야 할지 모르겠습니다.
질문:
OracleDb의 열거된 각 유형에 대해 동일한 Oracle PL/SQL 데이터 유형은 무엇입니까?형식 열거?
세 가지 유형의 정수가 있습니다.
OracleDbType의 (Int16, Int32, Int64)...어떤 것을 사용해야 하는지 또는 그것들이 모두인지 아는 방법.
일을 해야 합니까?
다음은 C# 유형을 가장 일반적인 OracleDb로 변환하는 방법입니다.종류들
private static OracleDbType GetOracleDbType(object o)
{
if (o is string) return OracleDbType.Varchar2;
if (o is DateTime) return OracleDbType.Date;
if (o is Int64) return OracleDbType.Int64;
if (o is Int32) return OracleDbType.Int32;
if (o is Int16) return OracleDbType.Int16;
if (o is sbyte) return OracleDbType.Byte;
if (o is byte) return OracleDbType.Int16; -- <== unverified
if (o is decimal) return OracleDbType.Decimal;
if (o is float) return OracleDbType.Single;
if (o is double) return OracleDbType.Double;
if (o is byte[]) return OracleDbType.Blob;
return OracleDbType.Varchar2;
}
또한 매우 큰 문자 데이터 값의 경우 사용할 수 있습니다.OracleDbType.Clob
.
OracleDb의 값Enumeration 유형은 설명서에 정의되어 있습니다.ODP for .NET 개발자 가이드를 읽어보십시오.
Int16, Int32 및 Int64 중에서 선택하는 것과 관련하여, 그들은 모두 작동해야 합니다.의 예상 크기와 일치하는 것을 선택합니다.순 변수:-32768과 32767 사이의 값의 경우 Int16, -2147483648과 2147483647 사이의 값의 경우 Int32, 더 큰 값의 경우 Int64.Ints 및 PL/SQL 데이터 유형 변환과 관련하여 몇 가지 재미있는 점이 있습니다.마크 윌리엄스의 블로그 게시물을 확인하세요.
코다
2021년 인사.이 게시물은 방금 업로드되었으므로 아마도 검색자들은 여전히 이 게시물을 찾고 유용하다고 느끼고 있을 것입니다.하지만 그것은 10년 이상 된 것임을 알아두시기 바랍니다.결과적으로, 그것이 제공하는 조언은 특히 비정상적인 행동과 관련하여, 더 최근 버전의 ODP와 관련이 없을 수 있습니다.권장 사항을 직접 확인하지 않고 따르지 마십시오.(이것은 소프트웨어 개발뿐만 아니라 인터넷에서 읽는 모든 것에 대한 일반적인 조언입니다!)
다음은 Oracle 21c ODP 설명서와 관련된 링크입니다.
APC의 링크를 확인하십시오. 이 링크가 당신이 찾고 있는 것입니다. 매핑은 열거형의 이름에 따라 매우 간단합니다.
하지만 여러분이 알아차리기 시작한 것처럼, 정수에는 뭔가 까다로운 것이 있습니다.다음은 제 매핑입니다.
Int16
:NUMBER(5)
.Int32
:NUMBER(10)
.Int64
:NUMBER(19)
.
문제는 만약 당신이 방문한다면.NUMBER(38)
열, 값이 올바른 범위에 있더라도 예외가 발생합니다...
NUMBER(1,0) => 부울
NUMBER(5,0) => Int16.최대값 == 32767
NUMBER(10,0) => Int32.최대 값 == 2,176,483,647
NUMBER(19,0) => Int64.최대값 == 9,223,372,036,854,775,807
NUMBER(19,0) => long.최대값 == 9,223,372,036,854,775,807
부동 소수점에 해당하는 값을 알고자 하는 사용자:
Decimal Oracle NUMBER type
Double 8-byte FLOAT type
Oracle에서 Number를 사용한 경우에는 소수점을 사용해야 합니다.
APC가 지적한 바와 같이: https://docs.oracle.com/cd/B19306_01/win.102/b14307/OracleDbTypeEnumerationType.htm
언급URL : https://stackoverflow.com/questions/1583150/c-oracle-data-type-equivalence-with-oracledbtype
'programing' 카테고리의 다른 글
엑셀에서 열 글자 문자열의 마지막 네 글자를 어떻게 추출합니까? (0) | 2023.07.16 |
---|---|
여러 데이터베이스 서버에 대해 구문을 확인할 수 있는 SQL Validator가 있습니까? (0) | 2023.07.16 |
기본 Git 분기를 가져오는 방법? (0) | 2023.07.11 |
도짓 태그도 밀립니까? (0) | 2023.07.11 |
해당 값으로 연결된 키 선택 (0) | 2023.07.11 |