【问题标题】:Coldfusion insert record into Oracle DBColdfusion 将记录插入 Oracle DB
【发布时间】:2019-10-24 08:04:36
【问题描述】:

我正在尝试将来自 Coldfusion 的记录插入 Oracle DB 11(g),但错误日志显示 ORA-00911:无效字符。我可以从 Oracle DB 中选择记录,但无法插入。

下面是我的代码。

<cfquery name="qOracleData" datasource="Oracle_Test">
    Insert into postindept (deptid, propos_position, descr, sm_descr60, grade) values ('1','110000  ', '110000  ','510000 ' ,'10');
    COMMIT;
</cfquery>

【问题讨论】:

  • '110000 ''510000 ' 值中的空格是故意的吗?你试过没有他们吗?可能是这些字段不是整数,您正在尝试插入其他字符。
  • 是的,我试过不带空格并显示相同的错误。字段是 varchar。
  • 表的架构是什么?你确定那些列是varchar吗? varchar 的大小是多少?

标签: oracle coldfusion sql-insert


【解决方案1】:

Oracle 仅支持每个查询使用一条语句。从插入语句中删除COMMIT;(您不需要,因为事务应该自动提交)和尾随分号。

此外,如果您要插入数值,则不应将它们作为字符串传递:

<cfquery name="qOracleData" datasource="Oracle_Test">
    Insert into postindept (
      deptid, propos_position, descr, sm_descr60, grade
    ) values (
      1,      110000,          110000, 510000,    10
    )
</cfquery>

你可以使用bind parameters:

<cfquery name="qOracleData" datasource="Oracle_Test">
    Insert into postindept (
      deptid,
      propos_position,
      descr,
      sm_descr60,
      grade
    ) values (
      <cfqueryparam value = "1"      cfsqltype = "CF_SQL_NUMERIC" />,
      <cfqueryparam value = "110000" cfsqltype = "CF_SQL_NUMERIC" />,
      <cfqueryparam value = "110000" cfsqltype = "CF_SQL_NUMERIC" />,
      <cfqueryparam value = "510000" cfsqltype = "CF_SQL_NUMERIC" />,
      <cfqueryparam value = "10"     cfsqltype = "CF_SQL_NUMERIC" />
    )
</cfquery>

【讨论】:

  • 我已经使用了你的方法,但仍然显示无效字符。
  • @Gary 该查询在 Oracle db<>fiddle 中有效,如果我从问题中的代码复制/粘贴它也有效(在删除 ; COMMIT; 之后)db<>fiddle。检查扩展字符集中没有任何您看不到可能导致问题的字符。
猜你喜欢
  • 1970-01-01
  • 2021-07-23
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多