ORA-00933: SQL command not properly ended

后端 未结 11 878
遇见更好的自我
遇见更好的自我 2020-12-03 22:54

I\'m using OLEDB provider for ADO.Net connecting to an Oracle database. In my loop, I am doing an insert:

insert into ps_tl_compleave_tbl values(\'2626899\'         


        
相关标签:
11条回答
  • 2020-12-03 23:56

    In addition to the semicolon problem, I strongly recommend you look into bind variables. Failing to use them can cause database performance problems down the road. The code also tends to be cleaner.

    0 讨论(0)
  • 2020-12-03 23:57

    In .net, when we try to execute a single Oracle SQL statement with a semicolon at the end. The result will be an oracle error: ora-00911: invalid character. OK, you figure that one SQL statement doesn't need the semicolon, but what about executing 2 SQL statement in one string for example:

    Dim db As Database = DatabaseFactory.CreateDatabase("db")
    Dim cmd As System.Data.Common.DbCommand
    Dim sql As String = ""
    
    sql = "DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; "
    
    cmd = db.GetSqlStringCommand(sql)
    db.ExecuteNonQuery(cmd)
    

    The code above will give you the same Oracle error: ora-00911: invalid character.

    The solution to this problem is to wrap your 2 Oracle SQL statements with a BEGIN and END; syntax, for example:

    sql = "BEGIN DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; END;"
    

    Courtesy: http://www.lazyasscoder.com/Article.aspx?id=89&title=ora-00911%3A+invalid+character+when+executing+multiple+Oracle+SQL+statements

    0 讨论(0)
  • 2020-12-03 23:58

    To me it seems you're missing a ; between the two statements:
    insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)
    ;
    insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)
    ;
    Try adding the ; and let us know.

    0 讨论(0)
  • 2020-12-04 00:00

    In my loop I was not re-initializing my StringBuilder ...thus the multiple insert statement I posted.

    Thanks for your help anyway!!

    0 讨论(0)
  • 2020-12-04 00:01

    It's a long shot but in the first insert the sql date format is valid for both uk/us, the second insert is invalid if the Oracle DB is setup for UK date format, I realise you have used the TO_DATE function but I don't see anything else ...

    0 讨论(0)
提交回复
热议问题