首页 > 解决方案 > 在 Oracle 函数中使用变量

问题描述

我有一个变量,想在模糊函数内的查询中使用,但考虑到 var,它给了我一些语法错误或错误结果。

ORA-20000:Oracle 文本错误:
DRG-50901:第 1 行第 21 列 29902 上的文本查询解析器语法错误。00000
-“执行 ODCIIndexStart() 例程时出错”

当我用一些静态字符串替换模糊函数中的 my_var 变量时,它工作正常,但使用变量它给了我这个错误。

我的查询如下:

DEFINE my_var = 'Bhularam'; 

SELECT a.EXTERNALID_ENC,
     a.EXTERNALID,
     a.TELNUMBER,
     a.TELAREACODE,
     a.DQ_ENGLISH_NAME,
     a.DQ_ARABIC_NAME,
     a.NAMEFIELD_1,
     a.USAGETYPE,
     a.MANUAL_UPDATE_FLAG,
     a.RULE_UPDATE_FLAG,
     a.BUSINESS_UPDATE_FLAG,
     a.EXCEL_UPDATE_FLAG         
 FROM ( 
   SELECT * FROM (
      SELECT dqlist.*,
             score(1) AS rank
      FROM dq_list_hash_full dqlist
      WHERE contains(dqlist.dq_english_name
                                ,'definescore(fuzzy(my_var, 1, 6, weight),relevance)',1) > 0
     UNION
     SELECT
         dqlist.*,
         score(1) AS rank
     FROM
         dq_list_hash_full dqlist
     WHERE
         contains(dqlist.dq_english_name,'!Bhularam',1) > 0
 )
ORDER BY
 rank DESC
     ) a

我知道这真的很愚蠢,但我无法理解它,可能我是甲骨文的新手。请帮帮我。

标签: sqloraclefull-text-searchoracle-text

解决方案


如果使用 sqlplus,请验证使用什么前缀字符来标识替换变量。默认设置为“&”。

sqlplus > show define
define "&" (hex 26)

尝试在查询中使用替换变量,例如

sqlplus > define my_var='hello world!'
sqlplus > select '&my_var' from dual;
old   1: select '&my_var' from dual
new   1: select 'hello world!' from dual

'HELLOWORLD!'
--------------------------------
hello world!

对于您的查询尝试(假设定义设置为“&”):

'definescore(fuzzy(&my_var, 1, 6, weight),relevance)',1)

推荐阅读