1

Oracle C++ Call Interface (OCCI) を使用して、Oracle 用の汎用データベース処理レイヤーを作成しています。アプリケーションの他の部分から提供された SQL 文字列を受け入れる必要があり (それがどのようなステートメントであるかは示されません)、そのステートメントのタイプがアプリケーションの呼び出し側で許可されていることを確認し、許可されている場合は、代わりにそれを実行する必要があります。発信者の。

ただし、提供された SQL 文字列に基づいて作成した OCCI ステートメントから SQL ステートメントの種類 (select、update、delete など) を取得する効率的な方法が見つかりません。

OCIAttrGet()OCI では、OCI ステートメント ハンドルを呼び出しOCI_ATTR_STMT_TYPEてパラメーターに渡すことでこの情報を取得attrtypeできますが、OCCI で同等の関数を見つけることができません。

を呼び出して OCCI ステートメントから OCI ステートメント ハンドルを取得できgetOCIStatement()ますが、これまでのところ、この OCI ステートメント ハンドルからステートメント タイプ属性を取得する試みは失敗しています。

  OCIStmt *ociStmt = sqlstmt->getOCIStatement();
  ub2 statementType = OCI_STMT_UNKNOWN;
  OCIError *errhp = 0;

  sword result = OCIAttrGet(ociStmt, OCI_HTYPE_STMT, &statementType, 0, OCI_ATTR_STMT_TYPE, errhp);

上記を実行するresult = -2と、変更はありませんstatementType

いずれにせよ、このアプローチはかなり後進的であり、むしろ OCCI でクリーンに動作すると思います。

準備されたOCCIステートメントのSQLステートメントタイプを判断する方法を知っている人はいますか(効率的でも安全でもない生のSQL文字列を解析する以外に)?

4

0 に答える 0