如何在QSqlQuery上使用Oracle查询提示?

时间:2011-12-19 04:54:53

标签: oracle

列“wimindex”上有一个升序默认索引。  我想使用oracle提示检索最近的一个,如下所示。  但似乎Oracle查询提示不起作用。  当然这个查询在Oracle sql / plus上运行良好。  只是QT QSqlQuery不起作用。  你能帮我吗 ?或任何提示?

以下是我的代码。 谢谢...

QString lastWimIdxQuery = “SELECT **/*+ index_rs_desc(VIOLATE, VIOLATE) */**  WIMINDEX FROMVIOLATE WHERE wimindex > 0 and rownum =1”;
query.exec(lastWimIdxQuery); 
int fieldNo = query.record().indexOf(“WIMINDEX”); 
if(query.next()) { 
this->m_lastWimIdx = query.value(fieldNo).toInt();
 qDebug()<<this->m_thread_name << “ : “ << this->m_lastWimIdx; 
}else { return; } 

1 个答案:

答案 0 :(得分:1)

似乎QT可能正在吃评论/提示而不是将其传递给数据库?使用您的查询在数据库中创建一个视图,并从中进行选择以确认此假设:

CREATE OR REPLACE VIEW LastWMIdxView as 
SELECT **/*+ index_rs_desc(VIOLATE, VIOLATE) */**  WIMINDEX 
  FROM VIOLATE 
 WHERE wimindex > 0 and rownum =1;

然后在您的代码中使用该视图:

QString lastWimIdxQuery = "SELECT wmindex FROM LastWMIdxView";

或者,您可以按原样运行查询并检查v $ sql视图以查看解析的内容:

SELECT sql_text
  FROm v$sql
 WHERE UPPER(sql_text) LIKE '%VIOLATE%';

如果发现评论被吃掉了,除非有办法在QT中控制,我认为你可能不得不使用上面概述的观点。