4

言語設定を変更するためにoraclealtersessionクエリを実行しようとしましたが、「ORA-01036:不正な変数名/番号」というエラーで失敗します。

preparedStatement = connection.prepareStatement("ALTER SESSION SET NLS_SORT = ?");

preparedStatement.setString(1, "BINARY_CI");

preparedStatement.execute();

Oracleでは、ddlステートメントで変数をバインドすることはできません。バインド変数にはパフォーマンスが向上し(私のユースケースでは、このセッション変更クエリはWebアプリケーションで使用されるすべての接続で実行されます)、アプリケーションがSQLインジェクションを実行できないようにするためです。変数をバインドしない場合、上記のセッション変更クエリを実行する他の最適化された方法はありますか?

4

2 に答える 2

4

クエリの解析/最適化は1回だけ実行され、実行ごとには実行されないため、バインド変数のパフォーマンスが向上します。

そのalter session呼び出しでは解析は行われません。ここでバインド変数を使用しても、パフォーマンスの点では何も得られません。

SQLインジェクションについては、サポートしている照合のリストに対して照合の名前を検証するだけです。

于 2011-04-01T13:27:33.327 に答える
1

ALTER SESSIONクエリプラン(作成に時間がかかる)を必要としないため、準備ができていなくても高速に実行する必要があります。

何らかの形式の接続プールを使用する場合(おそらく使用する場合)、このステートメントの実行頻度はさらに低くする必要があります。

ハードコードされたリテラル形式を使用するか、既知の照合のリストに対して照合名を確認してください。

于 2011-04-01T13:42:20.373 に答える