当前位置: 首页 > 面试题库 >

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

马奇略
2023-03-14
问题内容

下面我正在创建表。

    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();

问题答案:

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



 类似资料:
  • 问题内容: 我有这个查询 引发ORA-00936缺少表达式的allow查询有什么问题?任何人?任何帮助将不胜感激…在第一个顺序的开头处,列:80处引发错误: 问题答案: 您的查询可以大大简化。它具有诸如子查询的额外层和在子查询中不必要的东西。您想做什么就可以:

  • 问题内容: 我收到以下查询的ORA:00936错误。请让我知道查询中的问题 问题答案: SELECT convert(DATE,r.created_dt)作为created_dt 问题在于错误使用了 CONVERT 函数。请参阅文档。 我猜您正在尝试转换数据类型,可以使用 TO_DATE 将字符串转换为日期。或者, TO_CHAR 反之亦然。

  • 我有2个表与一对多的关系如下: 我的实体类和hbm配置如下: AuditDetail.java 审核详细信息。hbm。xml AuditParameter。Java语言 AuditParameter。hbm。xml 我的hql查询如下: 但当我执行此查询时,它会给我以下错误: ORA-00936:缺少表达式 以下是我的查询触发的控制台输出。 根据这个输出,我们可以看到Hibernate没有为a.a

  • 我是数据库领域的初学者,我的任务是编写一个在嵌套表中添加记录的过程,这是。我写的sql文件: 当我跑步的时候。sql文件我收到一条警告消息(使用编译错误创建的过程)当我运行时(显示错误过程TT1_ajute_PERSON_DANS_ALBUM;)我得到错误(忽略语句)和(缺少表达式) 我已经在谷歌上搜索过这个问题,大多数情况下都是因为打字错误,但我不认为这是我的情况!以下是表(TT1_相册)和(T

  • 问题内容: 我使用Spring 4.3.3.RELEASE,Hibernate 5.2.2.Final,数据库是MySQL。我想尝试一下 strategy = GenerationType.TABLE 。正如我对 GenerationType.SEQUENCE 所知, 我需要数据库中的序列来生成ID。 这是我的实体。 Spring注解配置 Spring xml配置 当我运行我的应用程序时,我得到

  • 问题内容: 我正在使用java / hibernate / Oracle。我有一个超过3000个条目的列表。如果我通过整个列表,我将获得以下例外。 引起原因:java.sql.SQLException:ORA-01795:列表中的最大表达式数为1000 为了解决此问题,我将列表分为多个子列表,每个子列表将有1000个条目。对于每千个条目,我都会触发一个查询。它工作正常。 请澄清一下,有没有更好的解