2017-09-13 1 views
0

Dapper를 사용하여 Oracle 12 데이터베이스에 부울을 삽입하는 데 문제가 있습니다.Dapper를 사용하여 Oracle에 부울을 삽입 할 수 없습니다.

내가 얻을 예외가 ORA-00932: inconsistent datatypes: expected NUMBER got BOOLEAN

을 인의 CommandText는

INSERT INTO crossqueryb.counterparty (Id,Name,IsBroker,DefaultPortfolioId) VALUES (:Id,:Name,:IsBroker,:DefaultPortfolioId) 

IsBrokerNUMBER(1)로 정의된다.

OracleParameter를 검사 할 때 DbType 및 OracleDbType 특성이 Boolean으로 설정됩니다. 값은 false이고 값의 유형은 object {bool}입니다.

매개 변수는 실제 도메인 유형 또는 익명 형식이 아닌 IDictionary<string,object>으로 Query 메서드에 전달됩니다.

이 경우 사용자 지정 유형 처리기를 작성해야하나요?

답변

0

Oracle SQL does not have a BOOLEAN 데이터 형식 (PL/SQL does, SQL 제외).

IsBrokerNUMBER(1)으로 정의됩니다. 당신은 오라클을 사용하면 변환 (false/true =>0/1 또는 -1/+1 또는 -7/3)을 수행하고자하는 방법을 모르는 것 같은 숫자 값에 부울 값을 변환해야합니다

.

+0

그래, Dapper가 나에게 그렇게 해줄 것으로 예상했는데, 그렇지 않다고 말하면서 내 자신의 TypeHandler를 작성해야한다는 말입니까? – John

+0

@ 존 Dapper를 사용하지 않았기 때문에 오라클 측에서 어떤 일이 발생했는지 알려줄 수 있습니다. 그러나 [이 답변] (https://stackoverflow.com/q/23502237/1509264) 및 [이 설명서 페이지] (https://stackoverflow.com/documentation/dapper/6/type-handlers/11/converting- varchar-to-ihtmlstring)는 형식 처리기가 대답이라고 제안합니다. – MT0

+0

@ 존 :이 답변에 따르면 : https://stackoverflow.com/questions/42365865/pass-c-sharp-bool-as-parameter-to-oracle-using-dapper, TypeHandler는 쿼리가 아닌 매개 변수에 적용됩니다. . 당신은 그 해답에서 해결책을 시도 할 수 있습니다. –

관련 문제