如何解决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] 举报,一经查实,本站将立刻删除。