我的问题是:是否有UTL_MATCH
与 aCLOB
而不是 a一起使用的 -like 函数VARCHAR2
?
我的具体问题是:我在 Oracle 数据库上。我有一堆与 Domo CenterView交互的预先编写的查询。查询中包含由 定义的变量${variableName}
。我需要重写这些查询。我没有写原件,所以我不想弄清楚变量的好值应该是什么,而是想用应用程序运行查询并获取查询的来源V$SQL
。
所以我的解决方案是:在UTL_MATCH
查询中使用变量 stuff 和V$SQL.SQL_FULLTEXT
. 但是,UTL_MATCH
仅限于VARCHAR2
且数据类型V$SQL.SQL_FULLTEXT
为CLOB
. 所以,这就是为什么我正在寻找一个UTL_MATCH
适用于数据类型的类似函数的原因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
;
所以我不确定转换子字符串有什么问题......