SELECT Oracle 数据库中的 CONCAT
SELECT CONCAT in Oracle DB
我正在使用 oracle 数据库,但我没有太多经验,以防我需要对 table 列进行 'backup' 我想使用 CONCAT在 sql 服务器上,但它在 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
使用||
运算符:
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;
Oracle 的 concat()
function 只接受两个参数。您可以嵌套调用,但这很混乱:
CONCAT(CONCAT(CONCAT('UPDATE HCAlerta SET descricao="', descricao,), '" WHERE neoId='), neoId)
用户更简单 the concatenation operator:
'UPDATE HCAlerta SET descricao="' || descricao || '" WHERE neoId=' || neoId
但是你引用的是错误的;双引号括起标识符,如 table 或列名,而不是值;所以你需要单引号 - 但需要转义它们:
'UPDATE HCAlerta SET descricao=''' || descricao || ''' WHERE neoId=' || neoId
在您的查询中将是:
select'UPDATE HCAlerta SET descricao=''' || descricao || ''' WHERE neoId=' || neoId
from HCAlerta
db<>fiddle 演示(未正确显示多字节字符;但这是该环境的问题,而不是查询...)。
您也可以使用 alternative quoting mechanism 但在这种特殊情况下这可能更令人困惑。
unfortunately returned to me Error: ORA-00923: FROM keyword not found where expected
如果您有一个 LONG 列,那么您可以使用 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;
/
...记得在您的客户端中启用输出(例如 SQL*Plus 等中的 set serveroutput on
)。
获取 table 的完整副本并在必要时恢复它可能更容易;或 export/import,等等
我正在使用 oracle 数据库,但我没有太多经验,以防我需要对 table 列进行 'backup' 我想使用 CONCAT在 sql 服务器上,但它在 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
使用||
运算符:
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;
Oracle 的 concat()
function 只接受两个参数。您可以嵌套调用,但这很混乱:
CONCAT(CONCAT(CONCAT('UPDATE HCAlerta SET descricao="', descricao,), '" WHERE neoId='), neoId)
用户更简单 the concatenation operator:
'UPDATE HCAlerta SET descricao="' || descricao || '" WHERE neoId=' || neoId
但是你引用的是错误的;双引号括起标识符,如 table 或列名,而不是值;所以你需要单引号 - 但需要转义它们:
'UPDATE HCAlerta SET descricao=''' || descricao || ''' WHERE neoId=' || neoId
在您的查询中将是:
select'UPDATE HCAlerta SET descricao=''' || descricao || ''' WHERE neoId=' || neoId
from HCAlerta
db<>fiddle 演示(未正确显示多字节字符;但这是该环境的问题,而不是查询...)。
您也可以使用 alternative quoting mechanism 但在这种特殊情况下这可能更令人困惑。
unfortunately returned to me Error: ORA-00923: FROM keyword not found where expected
如果您有一个 LONG 列,那么您可以使用 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;
/
...记得在您的客户端中启用输出(例如 SQL*Plus 等中的 set serveroutput on
)。
获取 table 的完整副本并在必要时恢复它可能更容易;或 export/import,等等