我的問題是:是否有UTL_MATCH
般的功能,其與CLOB
而非VARCHAR2
工作?UTL_MATCH的功能,可以與CLOB工作
我的具體問題是:我在Oracle數據庫上。我有一堆預先編寫的查詢,它與Domo CenterView接口。查詢的變量由${variableName}
定義。我需要重寫這些查詢。我沒有編寫原始代碼,因此我沒有弄清楚變量的優點是什麼,我想用應用程序運行查詢,並從V$SQL
獲取查詢內容。
所以我的解決方案是:做一個UTL_MATCH
查詢與變量的東西在它和V$SQL.SQL_FULLTEXT
。但是,UTL_MATCH
限制爲VARCHAR2
,而V$SQL.SQL_FULLTEXT
的數據類型爲CLOB
。所以,這就是爲什麼我要找一個類似UTL_MATCH
的函數,它可以與CLOB
數據類型一起使用。
如何完成此任何其他技巧是值得歡迎的。謝謝!
編輯,關於提示。如果您對如何做到這一點有了更好的瞭解,那麼讓我告訴您一些我掌握的信息。我有大約100個查詢,他們都在Excel電子表格中(其中有${variableName}
)。所以我可以很容易地使用Excel爲我寫一個查詢。我希望能夠將所有這些查詢結合在一起並將輸出複製到另一個表單中。無論如何,如果你認爲有更好的方法來做到這一點,那也許會有幫助。
一個例子:比方說,我有一個從多摩以下查詢:
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'
我已經tr了ied:
我嘗試子串串並將其轉換爲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
;
所以我不知道是什麼問題是鑄造子串...
您應該可以將max_length,vchar_1和vchar_2設置爲32767.對於SQL和PL/SQL,最大字符限制是不同的。 –
好點,我會給它一個鏡頭,並更新方法。謝謝 – kentcdodds