如何修改表SQL中列中的值

Posted

技术标签:

【中文标题】如何修改表SQL中列中的值【英文标题】:how to modify a value in a comumn in a table 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。这是什么意思? 【参考方案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';

【讨论】:

以上是关于如何修改表SQL中列中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何将表中列中的逗号分隔值放入 SQL IN 运算符?

oracle中列中的数据求和

在sql server中修改表设计中某个字段的类型,老是提示我出错,如何解决

用其他表中列的唯一值数填充sql表中的列

SQL如何使用同一列中的值匹配2个表

更新查询以根据不同表中的值更改一个表中列的现有值