【问题标题】:how to modify a value in a comumn in a table SQL如何修改表SQL中列中的值
【发布时间】:2020-09-18 10:10:46
【问题描述】:

我在一个数据库中有一个表 MYTABLE,它有几列。

给定列 DOGCOLORS 在所有行中都有多个值:

1:黄红绿 2:红紫绿 3:黑绿灰

我正在尝试查找一个查询,该查询在表 MYTABLE 中的 DOGCOLORS 列的每个值中将值“green”更新为“orange”

BEGIN TRANSACTION;
UPDATE MYTABLE
  SET DOGCOLORS=REPLACE(DOGCOLORS,'red','orange');
COMMIT TRANSACTION;

结果应该是这样的:

1: 黄色红色橙色 2:红紫橙 3:黑橙灰

在 DBeaver 上运行的查询给出了这些错误: PL/SQL:ORA-02185:除了 WORK 之外的令牌遵循 COMMIT 在预期以下情况之一时遇到符号“文件结尾”:

;

任何帮助表示赞赏

【问题讨论】:

  • 您正在阅读错误的手册。 Oracle SQL 参考指南是here。不过,我不知道你在哪里找到BEGIN TRANSACTION。这是什么意思?

标签: sql oracle sql-update find-replace


【解决方案1】:

只需将COMMIT TRANSACTION; 替换为COMMIT;。 你也不需要'BEGIN TRANSACTION;'它会自动启动

【讨论】:

    【解决方案2】:

    要在普通 SQL 中用值“橙色”更新每个子字符串“绿色”,请使用此查询

    update MYTABLE
    set dogcolors = replace(dogcolors,'green','orange')
    where dogcolors like '%green%'
    ;
    commit;
    

    要调用匿名 PL/SQL 块,请使用

    BEGIN
    update MYTABLE
    set dogcolors = replace(dogcolors,'green','orange2')
    where dogcolors like '%green%'
    ;
    commit;
    END;
    /
    

    注意一个好的做法是限制更新的行并排除将被更新为相同值的行 - 请参阅 UPDATE 语句中的 WHERE 谓词。

    提交事务你通常只使用commit;,但如果你需要它有点更详细这也是legal syntax(虽然很少使用):

     commit work comment 'transaction';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2016-08-13
      相关资源
      最近更新 更多