【问题标题】:SQL Error: ORA-00917: missing comma when inserting values into Customer table:SQL 错误:ORA-00917:将值插入客户表时缺少逗号:
【发布时间】:2015-10-13 14:27:35
【问题描述】:
Insert into Les_Mills_Customers
( 
    CUSTOMER_ID         
    ,C_USERNAME       
    ,C_TITLE                  
    ,F_NAME                  
    ,L_NAME                  
    ,C_MESSAGE               
    ,C_ADDRESS               
    ,C_GENDER                 
    ,C_MOBILE                  
    ,C_NOTES                 
    ,C_PAYMENT_MODE           
    ,C_EMAIL                 
    ,C_TYPE                   
    ,C_PICTURE                       
    ,C_JOINDATE                     
    ,C_TIMETABLES
 ) 
 values 
 ( 
    50
    ,’A_Joe’
    ,’Mrs’,
    ’Allison’
    ,’Joe’
    ,’RPM’
    ,’Claudelands’
    ,’F’
    ,0273252302
    , ’RPM’
    ,’E’
    ,’123@gmail.com’
    ,'NULL'
    ,’NULL’
    ,To_DATE ('20-02-15','DD-MM-YY'),01
 )

命令行错误:328 列:171 错误报告 - SQL 错误: ORA-00917: 缺少逗号 00917. 00000 - “缺少逗号” *原因:
*行动:

【问题讨论】:

  • 我猜有一个...缺少逗号?
  • @JeffreyKemp 这不是逗号,而是单引号的问题。
  • 您可能是对的,但没有足够的信息来判断这是否是复制粘贴错误(是的,我看到开发人员使用 MS Word 复制和粘贴代码!) .我从未见过任何其他情况,开发人员最终会在他们的代码中使用那些愚蠢的“智能引用”字符。

标签: sql oracle oracle11g


【解决方案1】:

您的 INSERT 语句存在多个问题:

’A_Joe’,’Mrs’,’Allison’,’Joe’,’RPM’,’Claudelands’,’F’,0273252302, 
’RPM’,’E’,’123@gmail.com’,'NULL',’NULL’,To_DATE ('20-02-15','DD-MM-YY')
  1. 您必须将 字符串 括在 单引号 内。 不是单引号,' 是单引号。就像您在 TO_DATE 函数中使用的一样。

  2. 最好使用YYYY 格式,否则您将重新发明Y2K 错误。

  3. NULL 不应在单引号内使用,保持关键字不变即可。否则,您会将其存储为字符串,而不是 NULL 值。

【讨论】:

    【解决方案2】:

    正如@Lalit 所指出的,您必须用单引号将字符串括起来。双引号可以在某些数据库产品中使用,只要设置得当,但这种配置不兼容ANSI,必须避免。

    请仅在手工制作的原始 SQL 语句中执行此操作。在执行的代码中将字符串传递给 SQL 命令将使您容易受到SQL injection attacks 的攻击。使用 SQL 参数是正确的方法。

    请注意像 Sant'Anna 这样带有撇号的名称。撇号经常用单引号表示。在这种情况下,将撇号加倍以表示单个撇号。

    INSERT INTO TABLE1 (NAME) VALUE ('Sant''Anna')
    

    【讨论】:

    【解决方案3】:

    INSERT INTO 语法如下,请修改您的代码,插入值的方式有问题,您没有使用单引号 (')。

    Insert into Les_Mills_Customers
    ( 
        CUSTOMER_ID         
        ,C_USERNAME       
        ,C_TITLE                  
        ,F_NAME                  
        ,L_NAME                  
        ,C_MESSAGE               
        ,C_ADDRESS               
        ,C_GENDER                 
        ,C_MOBILE                  
        ,C_NOTES                 
        ,C_PAYMENT_MODE           
        ,C_EMAIL                 
        ,C_TYPE                   
        ,C_PICTURE                       
        ,C_JOINDATE                     
        ,C_TIMETABLES
     ) 
     values 
     ( 
        50
        , 'A_Joe'
        , 'Mrs'
        , 'Allison'
        , 'Joe'
        , 'RPM'
        , 'Claudelands'
        , 'F'
        , 0273252302
        , 'RPM'
        , 'E'
        , '123@gmail.com'
        , NULL
        , NULL
        , To_DATE ('20-02-15','DD-MM-YY')
        , 01
     )
    

    【讨论】:

    • 始终使用 4 位数字表示全年 YYYY
    • @LalitKumarB ,是的 .. 但那是上面的代码,所以我没有修改它,因为它不是我的 :) 我不知道问的人是否想要它,它由他决定。
    猜你喜欢
    • 2015-11-21
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多