Dat*_*Rid 5 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
Run Code Online (Sandbox Code Playgroud)
未来数据(在我的sql之后):
[SpecificNumber] [Value1] [column2gettingupdated]
[1] 123456789 Test PREFIX-text
[2] 123456789102 sth PREFIX-text2
[3] 12233 text PREFIX-test3
Run Code Online (Sandbox Code Playgroud)
所以我想的是:
Update table
set column2gettingupdated=("prefix"+
(select column2gettingupdated from table where SpecificNumber = '12233')
)
where SpecificNumber = '12233';
Run Code Online (Sandbox Code Playgroud)
但这给了我一个ORA-00904: "p": invalid identifier错误.
如果我试试这个:
Update table
set column2gettingupdated=("prefix"+
(select column2gettingupdated from table where SpecificNumber = '12233')
)
where SpecificNumber = '12233';
Run Code Online (Sandbox Code Playgroud)
我收到一个ORA-01722: invalid number错误.
这甚至可能吗?已经感谢您的帮助!
Pat*_*con 13
所需要的只是使用连接运算符||.更新语法不要求您具有要获取column2gettingupdated值12233 的子查询.
此外,使用Oracle VARCHAR2,您使用单引号而不是双引号.这导致此语句的语法:
UPDATE table
SET column2gettingupdated = 'prefix' || column2gettingupdated
WHERE SpecificNumber = 12233;
Run Code Online (Sandbox Code Playgroud)
以下是示例模式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
Run Code Online (Sandbox Code Playgroud)
对字符串使用串联:
update <table_name>
set column2gettingupdated = 'Prefix-' || column2gettingupdated
where specificnumber = 12233; -- use NUMBER literal instead of string one
Run Code Online (Sandbox Code Playgroud)