列“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; }
答案 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中控制,我认为你可能不得不使用上面概述的观点。