アプリケーションが誤ったSQLステートメントを送信し、ステートメントをすぐに変更できないシナリオでは、誤ったSQLステートメントを正しいステートメントにマップするようにSQLステートメントマッピング機能を構成できます。 SQL文マッピング機能を設定した後、アプリケーションから送信されたSQL文が正しくない場合でも、SQL文を正しいSQL文にマッピングできます。
注意事項
SQL文マッピング機能を設定すると、指定された文字列に一致するすべてのSQL文が指定されたSQL文にマップされます。
前提条件
データベース用にpolar_sql_mappingプラグインが作成されていることを確認します。 デフォルトでは、このプラグインは新しく作成されたデータベースに対して自動的に作成されます。 以前のデータベースでは、プラグインを手動で作成する必要があります。
プラグインを手動で作成するには、次のコマンドを実行します。
default_with_rowidsをoffに設定します。拡張子polar_sql_mappingを作成します。Usage
polar_sql_mapping.use_sql_mappingパラメーターを設定して、SQL文のマッピング機能を有効にします。 デフォルトでは、このパラメーターはoffに設定されています。alter system set polar_sql_mapping.use_sql_mapping=on;- 誤ったsql文の自動記録を有効にするには、
polar_sql_mapping.record_error_SQLパラメーターを設定します。 デフォルトでは、このパラメーターはoffに設定されています。alter system set polar_sql_mapping.record_error_sql=on;説明 パフォーマンスへの影響を最小限に抑えるため、SQL文マッピング機能を使用する必要がなくなった場合は、誤ったSQL文の記録を無効にすることをお勧めします。alter system set polar_sql_mapping.record_error_sql=off; - 正しくないSQL文を照会します。
同様の出力が表示されます:select * from emp;エラー: 関係 "emp" は存在しません - 誤ったSQL文がpolar_sql_mapping.error_sql_infoに記録された後、次のコマンドを実行して、polar_sql_mapping.error_sql_info:
の詳細を照会します。同様の出力が表示されます:select * from polar_sql_mapping.error_sql_info ;id | クエリ | メッセージ | 呼び出し ---- -------------------- ------------------------------- ------ 1 | select * from emp; | リレーション "emp" が存在しない | 1 - error_sql_infoでIDが1のSQL文を指定されたSQL文にマップするマッピングを確立します。
select polar_sql_mapping.insert_mapping_id(1, 'select 1'); - 正しくないSQL文を再度照会します。
同様の出力が表示されます:select * from emp;? コラム? ---------- 1 (1行)説明 ほとんどのアプリケーションはPreparedStmtを使用します。 新しいSQLステートメントを作成するときは、'?' の代わりにプレースホルダ $nを使用します。 例:
同様の出力が表示されます:select * from polar_sql_mapping.polar_sql_mapping_table ;id | source_sql | target_sql ---- + ---------------------------------- + --------------------------------- 4 | select 1 from dual where a = $1; | select 1 from dual where 1 = $1 (1行)
パラメーター
| パラメーター | 説明 |
| polar_sql_mapping.max_num | 記録できる個別のSQL文の最大数を制御するために使用されます。 デフォルト値は 10 です。 指定された数を超える明確なSQL文は無視されます。 指定した値を変更するには、データベースを再起動します。 |
| polar_sql_mapping.error_sql_info_clear() | 記録された不正なSQL文をクリアするために使用します。 |
正常に実行されるSQL文を置き換える
SQL文マッピング機能を使用して正常に実行されるSQL文を置き換えるには、次の操作を実行します。
polar_sql_mapping.use_sql_mappingパラメーターを設定します。 SQL文マッピング機能を有効にします。 デフォルト値: off。alter system set polar_sql_mapping.use_sql_mapping=on;polar_sql_mapping.record_error_sqlパラメーターを設定します。 不正なSQL文の自動記録を有効にします。 デフォルト値: off。alter system set polar_sql_mapping.record_error_sql=on;説明 パフォーマンスへの影響を最小限に抑えるため、SQL文マッピング機能を使用する必要がなくなった場合は、誤ったSQL文の記録を無効にすることをお勧めします。alter system set polar_sql_mapping.record_error_sql=off;- 一致ノードを設定します。 一致モードに一致するすべてのSQL文は、polar_sql_mapping.error_sql_infoに格納されます。
次の例は、test_tableを含むSQL文が記録されていることを示しています (一致ロジックは、SQL構文のLIKE演算子の一致ロジックと一致しています) 。
- 一致モードを設定します。
polar_sql_mapping.error_patternを '% test_table %'; - 一致モードを有効にします。
polar_sql_mapping.record_error_sqlをtrueに設定します。 - 記録するSQL文を作成します。
select * from test_table; test_tableからを選択します。test_tableからmax(a) を選択します。 - polar_sql_mapping.error_sql_infoに記録および保存された結果を表示します。
同様の出力が表示されます:select * from polar_sql_mapping.error_sql_info;
test_tableを含むすべてのSQL文は、polar_sql_mapping.error_sql_infoに記録および保存されます。id | クエリ | メッセージ | 呼び出し ---- -------------------------------- ---------------------------- ------ 1 | select * from test_table; | エラーパターン強制記録 | 1 2 | test_tableから選択します。| エラーパターン強制記録 | 1 3 | test_tableからmax(a) を選択します。| エラーパターン強制記録 | 1 (3行)
- 一致モードを設定します。
- 記録されたSQL文を指定されたSQL文に置き換えます。
select polar_sql_mapping.insert_mapping_id(x, 'text');説明 上記の文で、xは正しい文のIDを示し、textは記録されたSQL文を置き換えるSQL文のテキストを示します。 実際の条件に基づいてSQL文を置き換えます。 - パフォーマンスの低下を防ぐには、SQL文マッピング機能を使用する必要がなくなったときに構成を復元します。
polar_sql_mapping.error_patternをリセットします。