ORA-00933: SQL command not properly ended 오류는 SQL 명령어 마지막에 특수문자를 입력하는 경우에 발생할 수 있습니다. 이를 해결하기 위해서는 SQL 명령어를 추출하여 테스트로 명령어를 실행해 보고 문제가 되는 부분을 확인해 주세요.
특히 세미콜론(;)으로 명령어를 종료하는 경우, DBMS 툴에서는 결과가 정상적으로 실행이 되지만, 응용 프로그램에서 실행 시 오류가 발생합니다. 또한 string이나 StringBuilder 클래스의 Append 메서드 등을 사용하는 경우에 예상치 않게 띄어쓰기가 제대로 적용이 되지 않아서 발생하는 경우도 있으니 해당 부분을 점검해 주세요.
다음은 특수문자 배열로 각 문자가 ORA-00933 SQL 명령어가 올바르게 종료되지 않았습니다(ORA-00911 문자가 부적합합니다) 오류가 어떻게 발생하는지 보여드리는 예제 자료입니다.
void BeomSang()
{
string[] specialSymbols = { "!", "@", "#", "$", "%", "^", "&", "*", "(", ")",
"-", "_", "=", "+", "[", "{", "]", "}", "\\", "|",
";", ":", "'", "\"", ",", "<", ".", ">", "/", "?",
"`", "~", ""};
int i = 0;
using (IDbConnection con = new OracleConnection("User Id=USER_NAME;Password=PASSWORD;Data Source=DATA_SOURCE_NAME"))
{
con.Open();
using (IDbCommand cmd = con.CreateCommand())
{
using (IDbTransaction tx = con.BeginTransaction())
{
foreach (string s in specialSymbols)
{
try
{
cmd.Transaction = (OracleTransaction)tx;
cmd.CommandText = $"INSERT INTO table_name (column_name) VALUES (:param) {s}";
cmd.Parameters.Clear();
((OracleParameterCollection)cmd.Parameters).AddWithValue(":param", "0");
i = cmd.ExecuteNonQuery();
cmd.Transaction.Rollback();
Debug.WriteLine($"{s} : OK");
}
catch (Exception ex)
{
Debug.WriteLine($"{s} : {ex.Message}");
}
}
}
}
}
}
예제소스는 다음과 같이 출력이 됩니다. 세미콜론과 같은 특수 문자를 조심해 주세요.
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
! : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
@ : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
# : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
$ : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
% : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
^ : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
& : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
* : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
( : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
) : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
- : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
_ : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
= : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
+ : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
[ : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
{ : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
] : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
} : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
\ : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
| : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
; : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
: : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
' : ORA-01756: quoted string not properly terminated
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
" : ORA-00972: identifier is too long
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
, : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
< : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
. : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
> : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
/ : ORA-00933: SQL command not properly ended
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
? : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
` : ORA-00911: invalid character
예외 발생: 'System.Data.OracleClient.OracleException'(System.Data.OracleClient.dll)
~ : ORA-00911: invalid character
: OK