sql - Oracle:通过增加现有值来更新数据行

标签 sql oracle sql-update

我的数据库(Oracle 11g)中有一个大表,我想在其中更新其中有特定编号的表的列。
我想通过在此列的每个值前面设置prefix来更新它。

示例(SpecificNumber是int和PK,Value1是Varchar2,最后一列也是):

实际数据:

    [SpecificNumber] [Value1] [column2gettingupdated]
[1]  123456789        Test     text    
[2]  123456789102     sth      text2    
[3]  12233            text     test3

将来的数据(在我的SQL之后):
    [SpecificNumber] [Value1] [column2gettingupdated]
[1]  123456789        Test     PREFIX-text    
[2]  123456789102     sth      PREFIX-text2    
[3]  12233            text     PREFIX-test3

所以我的想法:
Update table
set column2gettingupdated=("prefix"+
    (select column2gettingupdated from table where SpecificNumber = '12233')
)
where SpecificNumber = '12233';

但这给了我一个ORA-00904: "p": invalid identifier错误。

如果我尝试这样做:
Update table
set column2gettingupdated=("prefix"+
    (select column2gettingupdated from table where SpecificNumber = '12233')
)
where SpecificNumber = '12233';

我收到ORA-01722: invalid number错误。

这有可能吗?已经感谢您的帮助!

最佳答案

所需要做的就是使用串联运算符||。更新语法不要求您具有子查询来获取值12233的column2gettingupdated

另外,对于Oracle VARCHAR2,您可以使用单引号而不是双引号。这导致该语句的语法如下:

UPDATE table
   SET column2gettingupdated = 'prefix' || column2gettingupdated
 WHERE SpecificNumber        = 12233;

这是来自示例架构SCOTT的示例:
SCOTT@dev> CREATE TABLE DEPT2 as (
  2          SELECT *
  3            FROM DEPT
  4         );

Table created.

SCOTT@dev> commit;

Commit complete.

SCOTT@dev> UPDATE DEPT2
  2     SET DNAME  = 'PRE '|| DNAME
  3   WHERE DEPTNO = 20;

1 row updated.

SCOTT@dev> commit;

Commit complete.

SCOTT@dev> SELECT *
  2    FROM dept
  3   WHERE deptno = 20
  4   UNION
  5  SELECT *
  6    FROM dept2
  7   WHERE deptno = 20
  8  
SCOTT@dev> /

    DEPTNO DNAME          LOC
========== ============== =============
        20 PRE RESEARCH   DALLAS
        20 RESEARCH       DALLAS

关于sql - Oracle:通过增加现有值来更新数据行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26405864/

相关文章:

mysql - 在 MySQL 的一个查询中更新具有不同值的多行

sql - sqlserver中日期时间和时间戳之间的区别?

sql - BigQuery - 将 TIMESTAMP 转换为 HH :MM:SS and then identify TIME_DIFF

oracle - 从 PL/SQL 返回错误

sql - 如何只更新 PostgreSQL 9.4 中另一个表的更改值?

sql - PostgreSQL 是否具有在单个查询中多次更新同一行的机制?

mysql - SQL节点路径重构

mysql - GROUP BY - 排序前后分组

Oracle - 将日期值转换为 TO_CHAR()

带有 PARALLEL 提示的 SQL 查询分配的进程比指定的多得多