我收到的错误在我准备查询时可以看到:
SQL-ERR:Preparation of INSERT Query Failed: Ora-Err: -1756 ORA-01756:
quoted string not properly terminated
查询如下:
EXEC SQL declare INSDTA STATEMENT;
EXEC SQL PREPARE INSDTA FROM :stmt;
if(sqlca.sqlcode < 0)
{
DEBUG_LOG("SQL-ERR:Preparation of INSERT Query Failed: Ora-Err: %d %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
DEBUG_LOG("The Query is: %s\n", insertQuery);
return PREPARATION_FAILURE;
}
日志文件中的查询是:
INSERT INTO TABLENAME
VALUES (
'00000001',
'00004467',
'0',
'R56565',
'03404395',
'20110601',
'999',
'87685785',
'2017-01-10-23.05.26.000000',
'KRMAR',
'KRMAR',
'77898878',
'03',
'00000001',
'U',
'01',
'1',
'87685785',
'R56565',
'89878988',
'cde',
'Andr\351',
'andre.rae@abc.com',
'01192966',
'HGJF',
'00000000',
'',
'900429',
'1',
'98989897',
'',
'Aargau / Solothurn (CIC)',
'VCD',
'RB9',
'VCD',
'Observer'
)
如果我手动执行,则会插入数据。
但是以编程方式,许多这样的行都失败了。
请注意,插入查询的输入文本包含é
,ü
等特殊字符。
此外,同一个程序正在完美地开发系统。但在制作方面,却失败了。
手动插入正在正常进行生产。
可能是什么问题? 任何配置问题?
提前致谢。
答案 0 :(得分:3)
由于\
是转义字符,我认为错误来自'Andr\351'
,'André'
可能是r'xyzA*12*pqR*stB*HS*lmN*opA*45*a4N*gB*SD*drtU*ghy'
。
从查询中删除反斜杠字符,以检查这是否是真正原因。
答案 1 :(得分:2)
手动执行查询和使用动态SQL准备带有绑定变量的查询以便使用不同的参数执行多次之间存在根本区别。
以下是Dynamic SQL Statements的概述。您可能会发现特别有用的是有关准备动态SQL语句的部分 - 特别是有关Oracle中占位符的详细信息,以及有关执行动态SQL语句的部分。
如果没有看到您正在使用的动态SQL语句,以及如何声明占位符,很难说出问题可能是什么。
一些指示:
在尝试插入多个值时,您似乎正在使用一个变量。在Oracle中,在执行语句时,每个占位符必须有一个变量。
您要显示的步骤不完整。
:stmt
中的查询是什么样的? 您对占位符使用的变量有哪些值?
您的陈述遗失END-EXEC
取自上述来源的示例:
move "INSERT INTO publishers " &
"VALUES (?,?,?,?)" to stmtbuf
EXEC SQL
PREPARE stmt1 FROM :stmtbuf
END-EXEC
...
EXEC SQL
EXECUTE stmt1 USING :pubid,:pubname,:city,:state
END-EXEC
答案 2 :(得分:0)
从整数值
中删除所有(&#39;&#39;)答案 3 :(得分:0)
您的查询失败,因为Aargau / Solothurn(CIC)&#39;列值。 Backspace是特殊字符,因此您需要使用退格键或完全删除它。然后你就能成功执行它。