0

11.2.0.3 データベースで、DB アクティビティ全体の 47.42% を占める奇妙なクエリの問題に直面しています。

アプリは Flex で開発され、フロント エンドは Java バージョン 1.6.0_27 の Apache Tomcat 6.0.35 です。

私はいくつかのサイトを検索し、このサイトでも同じ問題を抱えている他の人を見つけました( Mysterious SQLがORACLEでのストアドプロシージャの実行をブロックしています)が、これまでのところ解決策は見つかりませんでした:-(

クエリは次のとおりです。

     SELECT package_name AS procedure_cat,
            owner AS procedure_schem,
            object_name AS procedure_name,
            argument_name AS column_name,
            DECODE(position,
                     0, 5,
                        DECODE(in_out,
                                 'IN',     1,
                                 'OUT',    4,
                                 'IN/OUT', 2,
                                           0)) AS column_type,
            DECODE (data_type,
                      'CHAR', 1,
                      'VARCHAR2', 12,
                      'NUMBER', 3,
                      'LONG', -1,
                      'DATE', 91,
                      'RAW', -3,
                      'LONG RAW', -4,
                      'TIMESTAMP', 93,
                      'TIMESTAMP WITH TIME ZONE', -101,
                      'TIMESTAMP WITH LOCAL TIME ZONE', -102,
                      'INTERVAL YEAR TO MONTH', -103,
                      'INTERVAL DAY TO SECOND', -104,
                      'BINARY_FLOAT', 100,
                      'BINARY_DOUBLE', 101,
                                       1111) AS data_type,
            DECODE(data_type,
                     'OBJECT', type_owner || '.' || type_name,
                               data_type) AS type_name,
            DECODE (data_precision,
                      NULL, data_length,
                            data_precision) AS precision,
            data_length AS length,
            data_scale AS scale,
            10 AS radix,
            1 AS nullable,
            NULL AS remarks,
            sequence,
            overload,
            default_value
  FROM all_arguments
  WHERE owner LIKE :1 ESCAPE '/'
        AND object_name LIKE :2 ESCAPE '/'
        AND package_name IS NULL
        AND (argument_name LIKE :5 ESCAPE '/'
             OR (argument_name IS NULL
                 AND data_type IS NOT NULL))
  ORDER BY procedure_schem, procedure_name, overload, sequence

誰かが解決策を見つけたのだろうか?

4

1 に答える 1

1

おそらく、あなたのコードは Spring の SimpleJdbcCall クラスを使用していますか? このクラスは、ストアド プロシージャに関する情報の取得を試み、結果をキャッシュします。そのため、SimpleJdbcCall クラスを 1 回インスタンス化し、ストアド プロシージャの呼び出しごとに再利用してください。

または、 SimpleJdbcCall オブジェクトを構築するときに withoutProcedureColumnMetaDataAccess() を呼び出すことができます。

于 2016-01-08T22:43:25.053 に答える