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的主要内容,如果未能解决你的问题,请参考以下文章