Oracle 11g插入CORRESPONDANT表遇ORA-00913错误求助
解决ORA-00913: too many values错误的修正方案
问题根源
你遇到的ORA-00913错误很明确——INSERT语句中声明的列数量和VALUES子句里提供的值数量不匹配:
- 你指定了8个目标列:
ID, DESIGNATION, REGROUPEMENT, FISCALID, ADRESSE, TEL, FAX, EMAIL - 但VALUES里塞了9个值:
SEQ_ID.NEXTVAL, 'Designation', 'regrouppement', '2az22z5a', 'ghazela', 1234, 56789, 123789, 'nabil@parrot.com'
多出来的那个123789是多余的,删掉它就能解决这个语法错误。
修正后的INSERT语句
去掉多余的数值后,语句可以正常执行:
INSERT INTO CORRESPONDANT (ID, DESIGNATION, REGROUPEMENT, FISCALID, ADRESSE, TEL, FAX, EMAIL) VALUES (SEQ_ID.NEXTVAL, 'Designation', 'regrouppement', '2az22z5a', 'ghazela', 1234, 56789, 'nabil@parrot.com')
适配C#代码的最佳实践
为了在C#中安全、高效地完成插入操作,强烈建议使用参数化查询——既能避免SQL注入风险,也能让代码更易维护:
- 序列
SEQ_ID.NEXTVAL可以直接写在SQL语句中,无需额外处理 - 用
OracleCommand绑定参数,不要直接拼接SQL字符串
示例C#代码片段(适配Oracle 11g):
using Oracle.ManagedDataAccess.Client; // 推荐使用托管驱动,无需额外安装Oracle客户端 var connectionString = "你的Oracle数据库连接字符串"; var insertSql = @" INSERT INTO CORRESPONDANT (ID, DESIGNATION, REGROUPEMENT, FISCALID, ADRESSE, TEL, FAX, EMAIL) VALUES (SEQ_ID.NEXTVAL, :Designation, :Regroupement, :FiscalId, :Adresse, :Tel, :Fax, :Email) "; using (var conn = new OracleConnection(connectionString)) { conn.Open(); using (var cmd = new OracleCommand(insertSql, conn)) { // 绑定参数,注意匹配数据库列的数据类型 cmd.Parameters.Add(":Designation", OracleDbType.Varchar2).Value = "Designation"; cmd.Parameters.Add(":Regroupement", OracleDbType.Varchar2).Value = "regrouppement"; cmd.Parameters.Add(":FiscalId", OracleDbType.Varchar2).Value = "2az22z5a"; cmd.Parameters.Add(":Adresse", OracleDbType.Varchar2).Value = "ghazela"; cmd.Parameters.Add(":Tel", OracleDbType.Int32).Value = 1234; cmd.Parameters.Add(":Fax", OracleDbType.Int32).Value = 56789; cmd.Parameters.Add(":Email", OracleDbType.Varchar2).Value = "nabil@parrot.com"; cmd.ExecuteNonQuery(); } }
额外优化建议
如果ID列已经设置了默认值为SEQ_ID.NEXTVAL(可以通过ALTER TABLE CORRESPONDANT MODIFY ID DEFAULT SEQ_ID.NEXTVAL;配置),后续插入时可以直接省略ID列的声明,让语句更简洁:
INSERT INTO CORRESPONDANT (DESIGNATION, REGROUPEMENT, FISCALID, ADRESSE, TEL, FAX, EMAIL) VALUES ('Designation', 'regrouppement', '2az22z5a', 'ghazela', 1234, 56789, 'nabil@parrot.com')
内容的提问来源于stack exchange,提问作者blaxk
相关产品推荐
相关产品推荐

