【问题标题】:ora-01036 illegal variable nameora-01036 非法变量名
【发布时间】:2012-11-21 11:16:11
【问题描述】:

我知道有相关的问题,但是我在网上遇到的大多数解决方案都有相同的解决方案,在 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 已关闭,那么我为简单的修复表示歉意。

我不断收到“ORA01036 非法变量...”消息

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

提前致谢!

【问题讨论】:

  • 请贴出错误信息的全文。
  • 我试图编辑我的原始帖子但不能(这是有道理的)。消息是“ORA-01036:非法变量名称/编号”,标题栏显示“OracleException 未被用户代码处理”。 PolicyId 和 HailCoverageId 的数据类型在数据库中都设置为数字(而不是字符串)。

标签: c# sql oracle mybatis


【解决方案1】:

PICNIC 问题。

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

将 cmets 从标签中取出(因此不会按字面意思阅读)解决了这个问题。我现在遇到了结果映射问题,但至少我克服了这个非法变量的废话。

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

【讨论】:

    【解决方案2】:

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

          AND             HCL_ID = #HailCoverageId#
    </select>
    

    到这里:

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

    【讨论】:

    • 我在发帖后看到了,很抱歉让您感到困惑。它确实在代码中关闭。我明天再看一遍后会回帖。
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 2018-05-21
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多