QSqlQueryで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

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でそれを制御する方法がない限り、おそらく上に概説したようなビューを使用する必要があるでしょう。

1
追加された