sql - 在 Oracle 数据库中选择 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演示(未正确显示多字节字符;但这是该环境的问题,而不是查询...)。
您也可以使用替代引用机制,但在这种特殊情况下可能会更令人困惑。
不幸返回给我错误:ORA-00923:未在预期的地方找到 FROM 关键字
如果您有一个 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;
/
...记住在您的客户端中启用输出(例如set serveroutput on
在 SQL*Plus 等中)。
获取表的完整副本并在必要时恢复它可能更容易;或出口/进口等
推荐阅读
- node.js - 如何在nodejs中从curl命令启用访问https
- python - 如何为在 django 中具有自动字段值作为主键的代码编写单元测试
- javascript - 引导选择元素未使用 react-router 呈现
- python - 如何从各种数据框创建子图
- reactjs - 扩展人员选择器以包括标签、输入框和按钮等表单项
- python - 运行屏幕截图后图像未存储
- react-native - 通用链接不适用于 React Native
- ubuntu - 通过 OVA 部署的 Ubuntu 19.04 的凭据是什么?
- ios - 与集合视图相关的设计
- android - 如何绕过点击外的android对话框