【问题标题】:SQL Quoted String Not Properly Terminated Error - OracleSQL 引用的字符串未正确终止错误 - 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 无法识别这些字符。我建议您找到并使用代码编辑器(其中有很多),并在编写程序时使用它而不是文字处理器。

标签: sql 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';
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多