微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java.sql.SQLException:ORA-00936:缺少表达式

如何解决java.sql.SQLException:ORA-00936:缺少表达式

是的,sql有点问题,这是您在 之前写了一个逗号。这导致Oracle的sql分析器抱怨。

解决方法

下面我正在创建表。

    public static final String CREATE_SQL = "CREATE TABLE " +DATABASE_TABLE +
        "(ID number(10,0)," +
        " CGUID VARCHAR(255)," + 
        " PGUID VARCHAR(255)," + 
        " SGUID VARCHAR(255)," + 
        " USERID VARCHAR(255)," +
        " ULOC VARCHAR(255)," +
        " SLOC VARCHAR(255)," +
        " PLOC VARCHAR(255)," +
        " ALOC VARCHAR(255)," +
        " SITEID VARCHAR(255)," +
        " ATTRIBUTEID VARCHAR(255)," +
        " ATTRIBUTEVALUE VARCHAR(255)," +
        " PRIMARY KEY ( ID ))";

当我尝试更新数据库表时,这是下面的UPSERT_SQL查询,我总是在 获取java.sql.SQLException:ORA-00936:缺少表达式
。我检查了我的SQL,找不到找不到表达式的地方。下面的SQL有问题吗?

public static final String UPSERT_SQL = "MERGE INTO " +DATABASE_TABLE+ " USING (  SELECT ? AS ID," +    // We will maybe add this record
    "                ? AS CGUID," +
    "                ? AS PGUID," +
    "                ? AS SGUID,"+
    "                ? AS USERID,"+
    "                ? AS ULOC,"+
    "                ? AS SLOC,"+
    "                ? AS PLOC,"+
    "                ? AS ALOC,"+
    "                ? AS SITEID,"+
    "                ? AS ATTRIBUTEID,"+
    "                ? AS ATTRIBUTEVALUE,"+
    "                FROM dual ) maybe "+
    "   ON (maybe.ID = "+DATABASE_TABLE+".ID) "+
    "         WHEN MATCHED THEN "+
            // We only need update the fields that might have changed
    "       UPDATE SET " +DATABASE_TABLE+ ".ULOC = maybe.ULOC," +DATABASE_TABLE+ ".SLOC = maybe.SLOC," +DATABASE_TABLE+ ".PLOC = maybe.PLOC," +DATABASE_TABLE+ ".ALOC = maybe.ALOC "+
    "         WHEN NOT MATCHED THEN "+
       // Insert new record
    "   INSERT VALUES (maybe.ID,maybe.CGUID,maybe.PGUID,maybe.SGUID,maybe.USERID,maybe.ULOC,maybe.SLOC,maybe.PLOC,maybe.ALOC,maybe.SITEID,maybe.ATTRIBUTEID,maybe.ATTRIBUTEVALUE)";

从下面开始,我执行该UPSERT_SQL语句。

LnPDataConstants.PSTMT = LnPDataConstants.DB_CONNECTION.prepareStatement(LnPDataConstants.UPSERT_SQL); // create a statement
                        LnPDataConstants.PSTMT.setInt(1,(int) ind);
                        LnPDataConstants.PSTMT.setString(2,LnPDataConstants.CGUID_VALUE);
                        LnPDataConstants.PSTMT.setString(3,LnPDataConstants.PGUID_VALUE);
                        LnPDataConstants.PSTMT.setString(4,LnPDataConstants.SGUID_VALUE);
                        LnPDataConstants.PSTMT.setString(5,LnPDataConstants.UID_VALUE);
                        LnPDataConstants.PSTMT.setString(6,LnPDataConstants.ULOC_VALUE);
                        LnPDataConstants.PSTMT.setString(7,LnPDataConstants.SLOC_VALUE);
                        LnPDataConstants.PSTMT.setString(8,LnPDataConstants.PLOC_VALUE);
                        LnPDataConstants.PSTMT.setString(9,LnPDataConstants.ALOC_VALUE);
                        LnPDataConstants.PSTMT.setString(10,LnPDataConstants.SITEID_VALUE);
                        LnPDataConstants.PSTMT.setString(11,"10200");
                        LnPDataConstants.PSTMT.setString(12,attrValue1.toString().split("=")[1]);
                        LnPDataConstants.PSTMT.executeUpdate();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。