gpt4 book ai didi

sql - 类似UTL_MATCH的函数与CLOB一起使用

转载 作者:行者123 更新时间:2023-12-02 23:00:10 26 4
gpt4 key购买 nike

我的问题是:是否存在类似于UTL_MATCH的函数,该函数可用于CLOB而不是VARCHAR2

我的特定问题是:我在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为我编写查询。我希望将所有这些查询合并在一起,然后将输出复制到另一张纸上。无论如何,如果您认为有更好的方法可以这样做,那么这可能会有所帮助。

一个例子:假设我有以下来自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
;


所以我不确定强制转换子字符串是什么问题...

最佳答案

UTL_MATCH是用于比较字符串以检查两个字符串的相似程度的包装。它的功能评估字符串并返回分数。因此,您所获得的只是一个数字,该数字指示(说)将${variableName}转换为“ Farmville”或“ StackOveflow”所需的编辑次数。

您将不会得到实际的区别:这两个文本字符串是相同的,只是在偏移量123处将${variableName}替换为“ Farmville”。

像这样说是一种替代方法。使用INSTR()SUBSTR()在Domo CenterView查询中找到${variableName}的实例,并使用这些偏移量来标识v$sql.fulltext等效项中的不同文本。您可以使用DBMS_LOB package在PL / SQL中使用CLOB进行此操作。

关于sql - 类似UTL_MATCH的函数与CLOB一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10703609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com