【问题标题】:0 rows updated while using update query in oracle在 oracle 中使用更新查询时更新了 0 行
【发布时间】:2017-09-04 12:05:41
【问题描述】:

当我尝试使用更新语句更新具有字符数据类型的列时。它说 0 行更新并且不会引发任何错误。由于列的数量很多,我尝试使用 where 子句,使用其中的特定列...它在哪里更新行。

问题是当所有列都用于更改值时,它会返回 0 行更新。我必须在 vba 代码/工具中自动化它,以便它可以使用所有行进行更新。我确定了未更新值但没有返回错误的列。

它只是说:

0 rows updated.

但是那个特定的列有什么问题(数据类型...十进制)。

请帮忙。我已经搜索了整个互联网,但没有结果。

【问题讨论】:

  • 显示查询和一些示例数据
  • 这是我不让更新的已识别列。更新 keyfigures2 设置 "Company Name" = 'chem5' 其中 "Gross Profit Margin" = 0.198871996076508; (P.S:表上没有主键)
  • 请显示您曾经拥有此0 updates...的 SQL 查询...
  • 这里是先生。向查询添加更多内容。更新 keyfigures2 设置“公司名称” = 'chem5' 其中“毛利率” = 0.198871996076508 AND “EBITDA(报告)” = 365 AND “EBITDA(Adj.)” = 583 AND “EBITDA(Adj.)Margin” = 0.142962236390387 AND “息税前利润(报告)”= 153;
  • 很少有表没有主键的情况。这通常是由于不良建模、懒惰或对关系原则的无知造成的。从您的查询中可以看出,PK 在这种情况下是很有可能的,并且很可能会解决您的问题。对设计进行排序,其余的将随之而来。

标签: sql oracle sql-update dml


【解决方案1】:

如果您尝试更新数据库中的特定值并且仅更新该值,则可能存在舍入问题。这意味着您看到的值不是存储的确切值。

因此,您可以尝试使用特定范围对其进行更新。

  1. 首先选择要更新的内容:

    select rowid from table_1 
     where val_x between <x>-<upsilon> and <x>+<upsilon>;
    
  2. 更新如果你只有一个值

    update table_1 set val_x = <new_val>
     where val_x between <x>-0.001 and <x>+0.001
    ;
    

(否则,如果超过1个值,则将&lt;upsilon&gt;减少到0.0001等)

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 2015-06-15
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多