Oracle: ORA-00911: 无效字符

Oracle: ORA-00911: invalid character

在我的代码中有以下查询字符串:

   private static final String QUERY = format(
                    "  SELECT t2.address " +
                    "  FROM schema.table1 t1    ," +
                    "  schema.table2 t2 ," +
                    "  schema.table3 t3            ,"+
                    "  schema.table4 t4 " +
                    "  WHERE t2.uniqueIdentifier =:%s " +
                    "  AND  t1.parent_id = t2.parent_alias " +
                    "  AND t3.company_id  = t1.company_id " +
                    "  AND t3.record_age  = t2.recordAge " +
                    "  AND t2.name = 'stubName' " +
                    "  AND t4.pln_foi_id = t2.recordAge ",uniqueIdentifier);

在本机查询中调用如下:

 public String getAddress(String uniqueIdentifier){

        String result = null;

        try {
            Query query = persistence.entityManager().createNativeQuery(QUERY);
            query.setParameter("uniqueIdentifier", uniqueIdentifier);
            result = query.getSingleResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

当我测试这个查询时,我得到以下信息:

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet

Caused by: java.sql.SQLSyntaxErrorException: ORA-00911: invalid character

什么可能导致此错误?我在我的查询字符串或代码中看不到任何可能导致它的问题。

查询应该是

...
"  WHERE t2.uniqueIdentifier = :uniqueIdentifier "
...

并删除对 String.format() 的调用;根据第一个 uniqueIdentifier 变量的值,您将受到 SQL 注入或 setParameter() 不起作用。

说明:当您有带参数的本机查询时,您需要在查询中使用 :(冒号)前缀指定参数名称。要使用参数 foo,请将 :foo 放入查询中并调用 setParameter("foo", value); 以指定应使用哪个值代替参数。