2012-02-26 3 views
0

.NET 응용 프로그램에서 Oracle 데이터베이스에 액세스하고 있습니다. 내 코드의 구조는 다음과 같습니다 :Oracle SQL 문 LONG DB에서 검색되지 않음

using (OracleConnection conn = new OracleConnection(Oradb)) 
{ 
    conn.Open(); 

    string sql = "SELECT RI_DESCRIPTION 
        FROM RI_RISK 
       WHERE RI_CODE = 'GAIL'"; 
    OracleCommand cmd = new OracleCommand(sql, conn); 
    cmd.CommandType = CommandType.Text; 

    OracleDataReader dr = cmd.ExecuteReader(); 
    dr.Read(); 

    var result = dr.GetString(0); 

    Assert.AreEqual("Golden Arches Insurance", result); 
} 

이제이 문장은 반환 할 수 없습니다.

하지만, 내가 기대 무슨 반환이 문을 얻을 수는 :

string sql = "SELECT CLI_ABBRNAME 
       FROM CLI_CLIENT 
       WHERE CLI_CLIENTNUMBER = 00404"; 

나는 테이블과 열 이름이 올바른지 여러 번 확인했다. 내가 볼 수있는 유일한 차이점은 데이터 유형입니다 :

  • RI_DESCRIPTION는
  • RI_CODE는
  • CLI_CLIENTNUMBER는
  • CLI_ABBRNAME 따라서

VARHCHAR2입니다 VARCHAR2입니다 VARCHAR2입니다 LONG이다, 뭔가 내가있다 코드에서 수행하지 않는 LONG과 관련이 있습니까?

또한 CLI_CLIENTNUMBER는 실제로 VARCHAR2입니다. 왜냐하면 VARCHAR2 인 RI_CODE는 'GAIL'주위에 아포스트로피가 필요하지만 (반면에 무효 식별자를 얻는 반면에) 명세서에서 00404 주위에 단일 아포스트로피가 필요하지 않습니다. 예외

** 편집

문이 잘 SQL에서 완벽하게 작동

플러스

** 편집 - 솔루션

, 대답에있는 링크를 다음의 OracleC을 설정하는 트릭이었다 객체 InitialLONGGetchSize를 -1로 설정합니다.

+0

DB를 엉망으로 나타납니다 당신이하는 일은 동일합니다 . –

+1

응용 프로그램이 아닌 데이터베이스에 대해 sql을 직접 실행하십시오. - 예상 결과를 얻는 지 확인하십시오. –

답변

1

하나는 LONG을 사용하면 안됩니다. 이 필드를 CLOB로 변환해야합니다. LONG은 더 이상 사용되지 않습니다.

ODP.NET을 사용중인 경우 "Obtaining LONG and LONG RAW Data"에서이 파일을 발견했습니다. 매개 변수 InitialLONGFetchSize이 처음에는 0으로 설정되어 있으므로 LONG을 검색하려면이 값을 늘려야합니다.

기술적으로는 기술적으로 인용 부호가 필요하지만 열과 숫자를 비교하기 때문에 암시 적 변환이 있다고 생각합니다. 설명 숫자 (LONG) 및 번호 (LONG) "골든 아치 보험"이 될 수 없습니다 안 :

SELECT CLI_ABBRNAME 
    FROM CLI_CLIENT 
WHERE TO_NUMBER(CLI_CLIENTNUMBER) = 404 
+0

해결되었습니다! 너의 도움에 매우 감사한다. – Hanshan