try
{
oESHIH.Fields.FieldByName("INVNUMBER").SetValue(sInvoiceNumber, true);
}
catch(Exception ex)
{
WriteLogFile.WriteLog("Error inserting invoice number: " + sInvoiceNumber + " for customer: " + sCustomerID);
for (int i = 0; i < accpacSession.Errors.Count; i++)
{
WriteLogFile.WriteLog("Sage error message: " + accpacSession.Errors[i].Message);
}
}
当我尝试执行该插入操作时,出现ORA-00984错误,我认为它的一切似乎都很好,而且我无法弄清楚自己做错了什么。
错误表明此处不允许使用该列。
答案 0 :(得分:1)
该错误表明您的变量是一个字符串,因此您必须将其用语句中的单引号引起;并且由于它们将位于另一个字符串(语句本身)内,因此需要对其进行转义。
在评论中,id_seq
是一个字符串,id_fk
是一个数字,因此类似:
stmt_ins_bck:= 'insert into sii_bck_tab(id_bck_tab,nome_tab,id_bck_cfg_tab) VALUES ('
|| SII_BCK_TAB_ID_SEQ.CURRVAL || ',''' || id_seq || ''',' || id_fk || ')';
-------------------------------------^^................^^ escaped single quotes
EXECUTE IMMEDIATE stmt_ins_bck;
但是使用绑定变量更简单并且通常更有效:
stmt_ins_bck:= 'insert into sii_bck_tab(id_bck_tab,nome_tab,id_bck_cfg_tab) VALUES (:v1,:v2,:v3)';
EXECUTE IMMEDIATE stmt_ins_bck USING SII_BCK_TAB_ID_SEQ.CURRVAL, id_seq, id_fk;
或者可能是因为序列引用在语句的固定部分中是合理的:
stmt_ins_bck:= 'insert into sii_bck_tab(id_bck_tab,nome_tab,id_bck_cfg_tab) VALUES (SII_BCK_TAB_ID_SEQ.CURRVAL,:v1,:v2)';
EXECUTE IMMEDIATE stmt_ins_bck USING id_seq, id_fk;