【问题标题】:Pro*C returning Not a number in the IN clausePro*C 在 IN 子句中返回 Not a number
【发布时间】:2014-06-26 18:43:07
【问题描述】:

我正在尝试使用 Pro*c 从我的 C 代码运行 SQL。这是我的 SQL

EXEC SQL select count(1) from MY_TABLE where id IN ( :format );

id 是 NUMBER(10),格式是 char 数组,包含值 1,2,3,4,5

这是返回“不是数字”的错误 但是,如果格式数组只是一个数字,它运行良好。 如果有人发现错误,请告诉我。

谢谢!

【问题讨论】:

  • IN 子句不支持这种方式的绑定变量。使用 Pro*C,您可能已经形成了一个带有硬编码值的查询字符串,或者尝试this
  • 考虑为 IN 运算符添加参数列表。无需在 SQL 中硬编码,只需添加 (:form1, :form2, ...)
  • @OracleUser:请将其添加为评论,以便我可以将其标记为答案。

标签: c oracle proc


【解决方案1】:

IN 子句仅接受绑定变量为 (:1,:2,:3) ,因此您事先知道绑定变量的数量。这不太可能。

最简单的方法是在 Pro*C 中用硬编码值形成一个动态查询字符串。

AsKTomMy SO answer 提供了替代解决方案

【讨论】:

    【解决方案2】:
        for(i=0;i<5;i++)
        {
            EXEC SQL select count(1) from MY_TABLE where id IN ( :format[i] );
        }
    

    我告诉使用上面的代码,因为它太糟糕了,只是解释数组在 Pro*C 中是如何工作的。你必须给出数组的索引。

    编辑:我为这个问题学到了一个新东西:- 我们也可以使用

        EXEC SQL FOR 5
            SELECT COUNT(1) FROM MY_TABLE WHERE id IN (:format);
    
       EXEC SQL SELECT COUNT(1) FROM MY_TABLE WHERE id IN 
                 (:format[0],:format[1],:format[2],:format[3],:format[4])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-30
      • 2014-01-02
      • 2011-01-12
      • 2012-03-14
      • 1970-01-01
      • 2021-10-02
      • 2010-09-12
      相关资源
      最近更新 更多