Oracle SQL拼接查询语句中为约束名添加双引号失败,报错ORA-00923的技术咨询
解决Oracle SQL拼接约束名加双引号的语法问题
我来帮你搞定这个拼接SQL的问题,你遇到的错误主要是字符串拼接的语法逻辑出了问题:
问题根源
你的SQL里有两个关键错误导致了ORA-00923报错:
- 误用了HTML转义字符
",Oracle SQL并不识别这个符号,它会被当作普通乱码字符处理,直接打乱了拼接逻辑; - 语句末尾多了一个多余的单引号,导致SELECT的列表达式没有正确闭合,数据库无法识别
FROM子句的位置。
正确的写法
在Oracle中,要在拼接的字符串里插入双引号,只需要把双引号放在一对单引号中(Oracle用单引号界定字符串常量)。修正后的SQL如下:
SELECT 'alter table ' || owner || '.' || table_name || ' disable constraint "' || constraint_name || '"' FROM dba_constraints WHERE owner IN ('TEST');
细节说明
- 这里的
'"'表示一个独立的双引号字符:前单引号开启字符串,中间是双引号,后单引号闭合字符串; - 拼接后生成的目标SQL会是这种格式:
alter table TEST.MY_TABLE disable constraint "MY_CONSTRAINT";,完全满足你给约束名加双引号的需求; - 额外提醒:Oracle默认会把数据库对象名(比如owner、table_name)转成大写存储,所以
WHERE owner IN ('TEST')用大写更稳妥,如果你的owner是创建时加了双引号的小写名称,那需要写成WHERE owner IN ("test")。
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

