在Oracle中的SELECT之上生成UPDATE语句[重复]

ehxuflar  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(146)

此问题在此处已有答案

How to handle a single quote in Oracle SQL(2个答案)
Concat function is not working - invalid number of arguments(4个答案)
17天前关闭。
我有一个名为EMPLOYEE的表,ID列作为Oracle数据库中的主键

ID   FIRST_NAME LAST_NAME
 1      ABC       DEF
 2      IJK       LMN
 3      OPQ       RST
 4      UVW       XYZ
 5      GBC       GEF
 6      IBC       JEF
 7      KBC       LEF
 8      MBC       NEF`

字符串
现在我运行一个带有过滤器的SELECT语句,如-

SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEE WHERE ID >3;


输出量:

FIRST_NAME LAST_NAME
  UVW          XYZ
  GBC          GEF
  IBC          JEF
  KBC          LEF
  MBC          NEF


我正在尝试基于上面的SELECT语句构建UPDATE语句。例如,我正在尝试生成如下所示的UPDATE语句,以便我可以在另一个数据库上运行(而不是使用Datapump)。

UPDATE EMPLOYEE SET FIRST_NAME=‘UVW’, LAST_NAME=‘XYZ’ WHERE ID=4;
UPDATE EMPLOYEE SET FIRST_NAME=‘GBC’, LAST_NAME=‘GEF’ WHERE ID=5;
UPDATE EMPLOYEE SET FIRST_NAME=‘IBC’, LAST_NAME=‘JEF’ WHERE ID=6;
UPDATE EMPLOYEE SET FIRST_NAME=‘KBC’, LAST_NAME=‘LEF’ WHERE ID=7;
UPDATE EMPLOYEE SET FIRST_NAME=‘MBC’, LAST_NAME=‘NEF’ WHERE ID=8;


我试过使用连接操作符,但没有成功。你能建议什么是正确的方法来生成上述UPDATE语句的相应ID列值的基础上的过滤条件(在这种情况下ID>3)
感谢你的帮助。
我试过这样的方法

SELECT CONCAT(
    (SELECT 'UPDATE EMPLOYEE SET FIRST_NAME=' ||FIRST_NAME FROM EMPLOYEE WHERE ID>3),
    ', ',
    (SELECT ', LAST_NAME=' ||LAST_NAME FROM EMPLOYEE WHERE ID>3),
    ', ',
    (SELECT 'WHERE ID=' ||ID FROM EMPLOYEE WHERE ID>3)
) AS concatenated_output;

af7jpaap

af7jpaap1#

我想你是一头扎进了某个深奥的代码里,《盗梦空间》。
相反,将每个返回的记录视为自己的UPDATE语句字符串可能会有所帮助:

SELECT 'UPDATE EMPLOYEE SET FIRST_NAME=''' || FIRST_NAME || ''', LAST_NAME=''' || LAST_NAME || ''' WHERE ID=' || ID || ';' as update_statement
FROM EMPLOYEE
WHERE ID>3

字符串
为了说明,双单引号只是在字符串中使用时表示一个单引号。例如:SELECT '''',如果你单独运行它,将返回'
这应该为每个UPDATE语句生成一行,您可以将其复制/粘贴到其他系统中。这不是最有效的ETL,但对于小数据,它可以完成这项工作。

相关问题