sql—在oracle数据库中选择concat

lyfkaqu1  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(289)

我正在使用一个oracle数据库,但我没有太多的经验,以防我需要对一个表列进行“备份”,我本来想在sql server上使用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
fzwojiic

fzwojiic1#

甲骨文 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演示(无法正确显示多字节字符;但这是该环境的问题,而不是查询的问题。
你也可以使用另一种引用机制,但在这种特殊情况下,这可能更令人困惑。
不幸的是,返回给我错误: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等)中。
db<>小提琴
可能更容易获取表的完整副本,并在必要时还原它;或出口/进口等。

baubqpgj

baubqpgj2#

使用 || 操作员:

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

在甲骨文中, CONCAT() 只需要两个参数。
如果您想要在两个数据库中都能工作的版本,可以使用 REPLACE() :

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

相关问题