ora-01036非法变量名

时间:2012-12-03 22:04:31

标签: c# sql oracle mybatis

我知道有相关的问题,但我在网上遇到的大部分解决方案都有相同的解决方案,将分号的前任从where子句中删除。但是,这对我不起作用,因为我没有分号。

我正在使用MyBatis并运行NUnit测试。

MyBatisCode

<select id="GetLineNumber" parameterClass="HashTable" resultClass="long">
  <![CDATA[
      SELECT
                     HP.LINE_NUM  
      FROM
                      ODS.HAIL_PLCY_LINE_NUM
      WHERE     
                      PLCY_ID = #PolicyId#
      AND             HCL_ID = #HailCoverageId#
</select>

C#代码: ...

  Hashtable lineNumberHash = new Hashtable
      {
         {"PolicyId",x.PolicyId}
            ,{"HailCoverageId",x.Id}
                 };
    lastDatabaseCoverage.AddRange(IbatisSqlMapper.QueryForList<T>("GetLineNumber", lineNumberHash));

上面代码中的“X”是一个对象,属性PolicyId和Id是有效的,所以请忽略一下无上下文信息!

请注意,我习惯使用SQL Server,所以如果Select,From,Where is off,那么我为简单修复而道歉。

我一直收到“ORA01036非法变量......”消息

这是我的第一个问题,所以我不知道他们得到多快的答案,但希望相当快: - )

提前致谢!

2 个答案:

答案 0 :(得分:1)

PICNIC问题。

CDATA标记未关闭的原因是因为我是从我的代码中复制/粘贴的。我没有做的是发布整个消息。我把一些代码注释掉了。我不认为添加评论是禁止的,但在再次查看之后我意识到CDATA标签是文字

从标签中取出注释(因此它们没有被字面意义地阅读)解决了问题。我现在有一个结果映射问题,但至少我已经超过了这个非法的变量废话。

感谢您的帮助和维基文章!

答案 1 :(得分:0)

我看到的唯一问题是您需要关闭查询包装的CDATA section。为此,请更改此信息:

      AND             HCL_ID = #HailCoverageId#
</select>

到此:

      AND             HCL_ID = #HailCoverageId#
  ]]>
</select>