1

次のように、実行時に決定される動的フィールドのSQLクエリを作成したいと思います。

SELECT some, random, field FROM table WHERE id = ?

インスタンス変数SQLStmtを宣言する必要があるという制限があるため:

public final SQLStmt sql = new SQLStmt("SELECT field0, field1 FROM table WHERE id = ?");

すべてのフィールドがハードコーディングされているか、VoltDBがコンパイルされないため、読み取りたいフィールドを設定できません。

では、VoltDBの最終文字列を使用して動的フィールドのSQLクエリをどのように作成しますか?

4

2 に答える 2

1

質問が書かれているように、実行時に最終文字列を変更する方法がないため、VoltDBの最終文字列を使用して動的フィールドのSQLクエリを作成する方法はありません。SQLStmtクラスがfinalである理由は、voltコンパイラーがカタログを作成するときにステートメントがコンパイルされるためです。パラメータまたは「バインド変数」を使用できますが、クエリで参照する列を動的にすることはできません。

ただし、@ AdHocシステムプロシージャを使用して、動的に生成されたSQLステートメントを実行することはできます。これがです。

于 2012-03-15T13:31:07.073 に答える
1

VoltDBは動的フィールドをサポートしていないことがわかりました。VoltDBの開発者からの正確な回答は次のとおりです。

VoltDB doesn't support the random row query you want here. You have to declare your SQL in advance. We only support parameterization of predicate expressions. If there is limited (say < 50MB) of data associated to id, you can use SELECT * FROM table WHERE id = ?; and filter in your stored procedure logic. Not ideal - but not particularly difficult, either. If ID is the partition attribute for this table, filtering in Java should be fast.

Ryan.
于 2011-12-08T17:22:41.167 に答える