在 Oracle DB 中选择 CONCAT



我正在使用一个 oracle 数据库,但我没有太多经验,以防我需要对我想在 sql 服务器上使用 CONCAT 的表列进行"备份",但它适用于 Oracle,不,它给出错误 ORA-00909。 我使用的查询是:

SELECT Concat ( 'UPDATE HCAlerta SET descricao="', descricao, '" WHERE neoId=', neoid )
FROM   hcalerta --that would give me AS an answer
UPDATE hcalerta
SET    descricao = "Tarefa 000015 - Solicitar Vaga -  - Requisição de Pessoal."
WHERE  neoid = 1071178

Oracle 的concat()函数只需要两个参数。你可以嵌套调用,但这很混乱:

CONCAT(CONCAT(CONCAT('UPDATE HCAlerta SET descricao="', descricao,), '" WHERE neoId='), neoId)

使用串联运算符更简单:

'UPDATE HCAlerta SET descricao="' || descricao || '" WHERE neoId=' || neoId

但是你的引号是错误的;双引号包围着标识符,如表或列名,而不是值;所以你需要单引号 - 但需要转义它们:

'UPDATE HCAlerta SET descricao=''' || descricao || ''' WHERE neoId=' || neoId

在您的查询中,这将是:

select'UPDATE HCAlerta SET descricao=''' || descricao || ''' WHERE neoId=' || neoId
from HCAlerta

db<>fiddle demo(它没有正确显示多字节字符;但这是该环境的问题,而不是查询......

您也可以使用替代引用机制,但在这种特殊情况下可能会更令人困惑。

不幸的是回到我身边 错误:ORA-00923:在预期位置找不到 FROM 关键字

如果你有一个长列,那么你可以使用PL/SQL块来处理它:

begin
for r in (
select neoId, descricao from HCAlerta
)
loop
dbms_output.put_line('UPDATE HCAlerta SET descricao=''' || r.descricao || ''' WHERE neoId=' || r.neoId);
end loop;
end;
/

。记住在客户端中启用输出(例如set serveroutput on在SQL*Plus等中(。

数据库<>小提琴

获取表的完整副本并在必要时恢复它可能更容易;或导出/导入等。

使用||运算符:

SELECT 'UPDATE HCAlerta SET descricao="' || descricao || '" WHERE neoId=' || neoId
FROM HCAlerta;

在 Oracle 中,CONCAT()只需要两个参数。

如果需要可在两个数据库中使用的版本,可以使用REPLACE()

SELECT REPLACE(REPLACE('UPDATE HCAlerta SET descricao="[descricao]" WHERE neoId=[neoId]',
'[neoId]', neoid
), '[descricao]', descricao
)
FROM HCAlerta;

最新更新