2012-03-06 2 views
1

오라클 00911 오류가 발생합니다 (잘못된 문자). 나는 누군가가 내가 이해하도록 도울 수 있기를 바라고있다. 내 오라클 11g 데이터베이스에는 SQL 문을 실행하려면 다음 코드를 사용하고ORA 00911 SQL 절이 세미콜론으로 끝나는 Where Error?

:

private DataTable ExecuteQuery(DbCommand query) { 
    DataTable result = new DataTable(); 
    using (DbConnection con = CreateConnection()) { 
    try { 
     query.Connection = con; 
     query.CommandTimeout = int.MaxValue; // don't impose a timeout 
     using (DbDataAdapter dataAdapter = factory.CreateDataAdapter()) { 
      dataAdapter.SelectCommand = query; 
      dataAdapter.Fill(result); 
     } 
    } 
    ... 

나는 그것이 잘 작동 "Select * from X;" 같은 DbCommand.CommandText 속성이 기능 무언가를 제공하지만,이 뜻 "Select * from x where y;" 주어진 경우 오라클 00911 예외를 던집니다. 그러나 세미콜론을 제거하면 잘 실행됩니다.

특정 유형의 명령문에서만 세미콜론으로 명령문을 끝내는 데 불법 문자 오류가 발생하는 이유를 알고 있습니까? 선명도

업데이트 :

내가 있던 세미콜론 원인이 오류 테스트하는 데 사용되는 정확한 쿼리 :

이 쿼리는 괜찮 았는데 : SELECT * FROM Machines;

이 쿼리는 0911 ORA 생성을 오류 : SELECT * FROM Machines WHERE ID = 47;

이 쿼리가 올바르게 작동하는 동안 : SELECT * FROM Machines WHERE ID = 47 < - 일부 업체의 (a SELECT COUNT(*)... 같은) 선행 추가 쿼리를 수행 및/또는 뭔가를 추가 - 단지 세미콜론 또한 사용되는 공급자가이 문제가 사용하는 DB 공급자에 따라 Oracle.DataAccess.Client

+0

실행하려는 쿼리를 표시 할 수 있습니까? –

+0

문자 그대로'Select * from X; '이고 또 다른 하나는'Select * from x where x.foo ='bar ';' – user12345613

+0

''bar'' 주위의 인용 문자가 일반 인용 문자 아스키 39)? –

답변

3

입니다

변경 쿼리 (예 : ROWID) ... 제공자가이 "내부 동작"을 구현하는 방법에 따라 세미콜론이있을 때 이상한 일이 발생할 수 있습니다 ... WHERE이 있는지 여부에 따라 다르게 동작 할 수도 있습니다 그렇지 않은 경우 ...

인 시나리오 당신 (순수 SELECT/UPDATE/DELETE 문)처럼 나는 호기심 ...

을 마지막에 세미콜론을 추가하지 마십시오과이 문제를 결코 없었다 : 당신은 왜 마지막에 세미콜론을해야합니까?

+0

세미콜론으로 명시 적으로 문장을 끝내는 것이 더 정확하다고 생각했습니다. 나는 그것을 지금 제거했다. 감사합니다 – user12345613

+0

@ user12345613 당신은 환영합니다 :-) 나는 PL/SQL에서만 세미콜론을 사용합니다 (예 : 익명 블록). – Yahia

+0

@ user12345613 도움이되는 답변으로 표시하는 것을 잊지 마십시오 (http : /meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). – Yahia

관련 문제