向Oracle中插入记录时,出现“Oracle.DataAccess.Client.OracleException ORA-00933 ”错误
错误信息的弹出框
异常的内容:
“Oracle.DataAccess.Client.OracleException”类型的未经处理的异常在 DBFSR.dll 中发生 其他信息: External component has thrown an exception.
捕获的异常信息:
Oracle.DataAccess.Client.OracleException ORA-00933: SQL 命令未正确结束 at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx*
解决方案:
本人的Oracle语句为
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into HP_TABLE(");
strSql.Append("TS_ID,DATE_SOLAR,DATE_LUNAR,HP_FID,HOUR_00,"+
"HOUR_01,HOUR_02,HOUR_03,HOUR_04,HOUR_05,HOUR_06,HOUR_07,HOUR_08,HOUR_09,HOUR_10,"+
"HOUR_11,HOUR_12,HOUR_13,HOUR_14,HOUR_15,HOUR_16,HOUR_17,HOUR_18,HOUR_19,HOUR_20,"+
"HOUR_21,HOUR_22,HOUR_23,\"SUM\",\"AVG\",G1_T,G1_L,G2_T,G2_L,D1_T,D1_L,D2_T,D2_L,UPDATE_TIME,DETAILS)");
strSql.Append(" values (");
strSql.Append(":TS_ID,:DATE_SOLAR,:DATE_LUNAR,:HP_FID,:HOUR_00,"+
":HOUR_01,:HOUR_02,:HOUR_03,:HOUR_04,:HOUR_05,:HOUR_06,:HOUR_07,:HOUR_08,:HOUR_09,:HOUR_10," +
":HOUR_11,:HOUR_12,:HOUR_13,:HOUR_14,:HOUR_15,:HOUR_16,:HOUR_17,:HOUR_18,:HOUR_19,:HOUR_20," +
":HOUR_21,:HOUR_22,:HOUR_23,:\"SUM\",:AVG,:G1_T,:G1_L,:G2_T,:G2_L,:D1_T,:D1_L,:D2_T,:D2_L,:UPDATE_TIME,:DETAILS)");
经检查,发现是关键字冲突,在上面“AVG”关键字与系统的函数冲突,只将上面的AVG加上引号还不够,还要将下面的AVG参数名加上引号。
PS,其实经过作者测试,SUM的参数名可以不加引号。
...
":HOUR_21,:HOUR_22,:HOUR_23,:\"SUM\",:\"AVG\",:G1_T,:G1_L,:G2_T,:G2_L,:D1_T,:D1_L,:D2_T,:D2_L,:UPDATE_TIME,:DETAILS)");
...
这样即可解决问题。进行正常的插入操作。
经验:
(1)对于较长的sql语句,最好将其粘贴到Word中进行分段识别,否则很难保证正确。
(2)一般写作的SQL语句,可以现在如PL/SQL中进行测试正确与否。
(3)平时要多SQL语句,包括高级的操作语法,如建立规则,事物,挎库数据转移,触发,数据表设计,实时更新数据的触发与操作。以及典型的即时通讯,并发操作,海量查询,索引,备份与恢复,安全等内容。
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。