ORA-00911: 문자가 부적합합니다, ORA-00911: invalid character오류를 해결하는 방법에 대해 안내해 드리겠습니다.
무슨 문자가 부적합하길래 이러한 오류가 발생하는 것일까요? 데이터베이스 매니지 툴에서 실행할 때에는 정상인 쿼리가 응용 프로그램에서만 문제가 발생한다면 혹시 세미콜론(;)이 문장의 끝에 따라왔는지 확인해 주세요. 그 외에도 마지막 부분에 적합하지 않은 문자가 보일 가능성이 높습니다.
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
}
}
}