ORA-00911: 문자가 부적합합니다 해결하기 (ORA-00911: invalid character)

ORA-00911: 문자가 부적합합니다, ORA-00911: invalid character오류를 해결하는 방법에 대해 안내해 드리겠습니다.

무슨 문자가 부적합하길래 이러한 오류가 발생하는 것일까요? 데이터베이스 매니지 툴에서 실행할 때에는 정상인 쿼리가 응용 프로그램에서만 문제가 발생한다면 혹시 세미콜론(;)이 문장의 끝에 따라왔는지 확인해 주세요. 그 외에도 마지막 부분에 적합하지 않은 문자가 보일 가능성이 높습니다.

ORA-00911: 문자가 부적합합니다 해결하기

System.Data.OracleClient.OracleException (0x80131938): ORA-00911: 문자가 부적합합니다
위치: System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
위치: System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
위치: System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor)
위치: System.Data.OracleClient.OracleCommand.ExecuteNonQuery()

다음은 ORA-00911: 문자가 부적합합니다 오류가 발생하는 예제 자료입니다. INSERT INTO table_name (column_name) VALUES (:param); 에서 맨 뒤에 세미콜론이 포함되어 문제가 발생합니다. INSERT INTO table_name (column_name) VALUES (:param)과 같이 수정해 주어야 합니다. 예시자료는 INSERT 구문을 중심으로 하였으나, ALTER와 같은 DDL에서도 발생할 수 있습니다.

int i;
using (IDbConnection con = new OracleConnection("User Id=userName;Password=password;Data Source=dataSourceName"))
{
    con.Open();
    using (IDbCommand cmd = con.CreateCommand())
    {
        using (IDbTransaction tx = con.BeginTransaction())
        {
            cmd.Transaction = (OracleTransaction)tx;
            cmd.CommandText = "INSERT INTO table_name (column_name) VALUES (:param);";
            cmd.Parameters.Clear();
            ((OracleParameterCollection)cmd.Parameters).AddWithValue(":param", "");
            i = cmd.ExecuteNonQuery();
            cmd.Transaction.Rollback();//TEST
        }
    }
}

댓글