需要RWDBOSql的提取功能帮助

时间:2019-04-01 09:22:08

标签: c++

当前,在使用RWDBOSql的fetch()函数时,我们遇到了一个奇怪的问题。 当我们从C ++代码构建查询并从代码运行查询时,它将无法正常工作。

但是,当我们从代码构建并从日志复制并在Toad / sql开发人员中运行的查询相同时 工作正常。因此,我们不确定为什么在代码中运行同一查询时会有不同的表现     然后将其粘贴到蟾蜍上。

请检查我们使用以下代码构建的belwo查询-

案例1-

 RWCString sql_string ("SELECT * FROM ( SELECT ID "
    "FROM VIEW1 V1, VIEW2 V2 "
    "WHERE V1.CLIENT_ID='");
    sql_string.append(string1);
    sql_string.append("' AND V1.UNIT_ID = V2.ACTION_ID AND "
    "(V2.S_TYPE='S1' OR V2.S_TYPE='S2') "
    "ORDER BY V1.CTDB_CRE_DATETIME DESC) WHERE ROWNUM = 1;");

生成了以下查询-

  

SELECT * FROM(在VIEW1 V1和VIEW2 V2中选择ID   V1.CLIENT_ID ='123456'AND V1.UNIT_ID = V2.ACTION_ID AND   (V2.S_TYPE ='S1'或V2.S_TYPE ='S2')按V1.CRE_DATETIME DESC排序)   WROWE ROWNUM = 1;

然后我们将提取函数称为-

RWDBOSql get_order_query(sql_string);
RWDBTBuffer<RWCString> order(100);
get_order_query[0] >> order;



  while (get_order_query.fetch(),get_order_query.rowsFetched() > 0) 
    {
         value = order[0];
         value = value.strip(RWCString::both);
    }

现在,在这种情况下,它不会进入while循环,并且实际上会获取返回-1。

但是从toad / sql developer中运行该查询时,它会运行并给出结果集。

我们通过用以下几行替换上面的代码来解决此问题-

案例2-

 std::ostrstream sql_statement;
    sql_statement << "SELECT ID ";
    sql_statement << "FROM VIEW1 V1, VIEW2 V2 ";
    sql_statement << "WHERE V1.CLIENT_ID='" << string1 << "' AND V1.UNIT_ID = V2.ACTION_ID AND ";
    sql_statement << "(V2.S_TYPE='S1' OR V2.S_TYPE='S2') ";
    sql_statement << "ORDER BY V1.CTDB_CRE_DATETIME DESC" << std::ends;

生成了以下查询-

  

在VIEW1 V1,VIEW2 V2 V1.CLIENT_ID ='123456'和中选择ID   V1.UNIT_ID = V2.ACTION_ID AND(V2.S_TYPE ='S1'或V2.S_TYPE ='S2')ORDER   到V1.CTDB_CRE_DATETIME DESC

然后我们将提取函数称为-

RWDBOSql get_order_query(sql_statement.str());
RWDBTBuffer<RWCString> order(500);
get_oms_order_query[0] >> order;



   while (get_order_query.fetch(),get_order_query.rowsFetched() > 0) 
    {
        for (int i = 0; i < get_order_query.rowsFetched(); i++) 
       {
           value = order[0];
           value = value.strip(RWCString::both);
           break;
        }
    }

在这种情况下,当我们从日志中复制查询时,如果在蟾蜍中运行查询,代码也可以正常运行。

请让我们知道为什么案例1中的代码无法正常工作。我们做错了什么吗?

0 个答案:

没有答案