SQL 引用的字符串未正确终止错误 - Oracle

Posted

技术标签:

【中文标题】SQL 引用的字符串未正确终止错误 - Oracle【英文标题】:SQL Quoted String Not Properly Terminated Error - Oracle 【发布时间】:2020-04-12 01:12:42 【问题描述】:

我对 SQL 很陌生,我不明白为什么以下查询会在 Oracle 中引发错误...

SELECT b.ATHLETEID, b.FNAME, b.SNAME, c.BDATE, c.CCODE, c.SPORTID
FROM “USER2_VF_S4530748”.“ATHLETE_V2” c,
     (SELECT ATHLETEID, FNAME, SNAME FROM “USER1_VF_S4530748”.“ATHLETE_V1”) b 
WHERE b.ATHLETEID = c.ATHLETEID AND c.CCODE = ‘AUS’;

我收到错误 ORA-01756:带引号的字符串未正确终止

谁能赐教?

【问题讨论】:

您显然使用了诸如 Microsoft Word 之类的文字处理器来准备您的代码。不幸的是,文字处理器经常使用替代字符作为单引号(参见上面代码中AUS 周围的字符)和双引号(例如ATHLETE_V1 周围的字符)。 Oracle 无法识别这些字符。我建议您找到并使用代码编辑器(其中有很多),并在编写程序时使用它而不是文字处理器。 【参考方案1】:

试着写成这样:

SELECT u1.ATHLETEID, u1.FNAME, u1.SNAME, u2.BDATE, u2.CCODE, u2.SPORTID
FROM USER2_VF_S4530748.ATHLETE_V2 u2 JOIN
     USER1_VF_S4530748.ATHLETE_V1 u1
     ON u2.ATHLETEID = u1.ATHLETEID AND u2.CCODE = 'AUS';

这不仅使用正确、明确、标准、可读的JOIN 语法。但它也修正了引号。

【讨论】:

【参考方案2】:

我认为这是 的问题。 SQL 中的双引号由" 表示(不是)。单引号也是如此。它必须由' 表示(而不是''

所以你的查询应该是这样的:

SELECT b.ATHLETEID, b.FNAME, b.SNAME, c.BDATE, c.CCODE, c.SPORTID
FROM "USER2_VF_S4530748"."ATHLETE_V2" c JOIN
     (SELECT ATHLETEID, FNAME, SNAME FROM "USER1_VF_S4530748"."ATHLETE_V1") b 
   ON b.ATHLETEID = c.ATHLETEID 
WHERE c.CCODE = 'AUS';

如果表名和列名全部大写,则根本不要使用双引号,oracle在执行查询时会将所有不带双引号的对象名转换为大写。

SELECT b.ATHLETEID, b.FNAME, b.SNAME, c.BDATE, c.CCODE, c.SPORTID
FROM USER2_VF_S4530748.ATHLETE_V2 c JOIN
     USER1_VF_S4530748.ATHLETE_V1 b 
   ON b.ATHLETEID = c.ATHLETEID 
WHERE c.CCODE = 'AUS';

注意:我也删除了内部视图,因为这里不需要它。

【讨论】:

以上是关于SQL 引用的字符串未正确终止错误 - Oracle的主要内容,如果未能解决你的问题,请参考以下文章

引用的字符串未正确终止

ORA-01756: 引用的字符串未正确终止

引用在 plsql 中未正确终止

使用 .Net Core 在 linux 机器上查找内核数失败并出现错误(未终止的引用字符串)

创建函数错误错误:在“$$”处或附近未终止的美元引号字符串

sql2008 自动备份计划失败 错误号:-1073548784