私の質問は:ではなくUTL_MATCHで動作する-のような関数はありますか?CLOBVARCHAR2
私の特定の問題は次のとおりです。私はOracleデータベースを使用しています。DomoCenterViewとインターフェイスする事前に作成されたクエリがたくさんあります。クエリには、で定義された変数が含まれています${variableName}。これらのクエリを書き直す必要があります。私はオリジナルを書いていなかったので、変数の適切な値を理解する代わりに、アプリケーションでクエリを実行し、クエリが何であるかを取得したいと思いますV$SQL。
したがって、私の解決策は次のとおりUTL_MATCHです。変数を含むクエリに対してaを実行しますV$SQL.SQL_FULLTEXT。ただし、UTL_MATCHに限定されVARCHAR2、のデータ型はV$SQL.SQL_FULLTEXTですCLOB。UTL_MATCHしたがって、これが、データ型で機能する-like関数を探している理由ですCLOB。
これを達成する方法に関するその他のヒントは大歓迎です。ありがとう!
ヒントについて編集します。これを行う方法についてより良いアイデアがあれば、私が自由に使える情報をいくつかお話ししましょう。私は約100のクエリを持っていますが、それらはすべてExcelスプレッドシート(に含まれているもの${variableName})にあります。そのため、Excelを使用してクエリを簡単に作成できました。これらすべてのクエリを結合して、出力を別のシートにコピーしたいと思っています。とにかく、これを行うためのより良い方法があると考えている場合は、おそらくそれが役立つでしょう。
例: Domoから次のクエリがあるとします。
select department.dept_name
from department
where department.id = '${selectedDepartmentId}'
;
私はこのようなものを呼びたいです:
select v.sql_fulltext
from v$sql v
where utl_match.jaro_winkler_similarity(v.sql_fulltext,
'select department.dept_name
from department
where department.id = ''${selectedDepartmentId}''') > 90
;
そして、見返りに次のようなものを入手してください。
SQL_FULLTEXT
------------------------------------------
select department.dept_name
from department
where department.id = '154'
私が試したこと:
CLOBをサブストリング化して、varcharにキャストしてみました。私はこれがうまくいくことを本当に望んでいました、しかしそれは私にエラーを与えます。コードは次のとおりです。
select v.sql_fulltext
from v$sql v
where utl_match.jaro_winkler_similarity( cast( substr (v.sql_fulltext, 0, 4000) as varchar2 (4000)),
'select department.dept_name
from department
where department.id = ''${selectedDepartmentId}''') > 90
;
そして、ここにエラーがあります:
ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 8000, maximum: 4000)
ただし、これを実行すると正常に動作します。
select cast(substr(v.sql_fulltext, 0, 4000) as varchar2 (4000))
from v$sql v
;
だから私は部分文字列をキャストすることの問題が何であるかわかりません...