一直在研究一个问题,即通过替换出现在同义词和单词替换列表中的单词来替换字符串中的单词。一个字符串可能会产生多个字符串,具体取决于替换。这样做的想法是获得可能的字符串替换,作为可以在SQL查询中使用的函数。但是,我得到了错误ORA-06502: PL/SQL: numeric or value error: character to number conversion error
。让我解决上一个问题。
有一个单词替换表,例如:
WORD SUBS_LIST
MOUNTAIN MOUNTAIN, MOUNT, MT, MTN
VIEW VIEW, VU
FORMULA FORMULA, 4MULA, FOURMULA
此外,我的同义词表如下:
WORD SYN_LIST
EDUCATION SCHOOL, UNIVERSITY, COLLEGE, TRAINING
FOOD SYN, BAR, BISTRO, BREAKFAST, BUFFET, CABARET, CAFE, CANTINA, CAPPUCCINO, ...,
STORE SYN, CONVENIENCE, FOOD, GROCER, GROCERY,...,
REFRIGERATION SYN, APPLIANCE, COLDSTORAGE, FOODLOCKER, FREEZE, FRIDGE, ICE, REFRIGERATION
如果我有一个字符串,例如MOUNT VU SYN GROWERS
,该函数应返回一个由三个字符串组成的数组,这些字符串针对所有可能的替换生成:
MOUNTAIN VIEW STORE GROWERS
MOUNTAIN VIEW FOOD GROWERS
MOUNTAIN VIEW REFRIGERATION GROWERS
然后,查询应通过以下方式调用该函数以替换同义词和替换:
select replace_synonyms('MOUNT VU SYN GROWERS') from dual;
SELECT name, replace_synonyms(name) corrected_name
FROM institutions
WHERE replace_synonyms(name) LIKE replace_synonyms('MOUNT VU SYN GROWERS')
为了解决此问题,创建了一个函数来替换字符串并提供可能的替换。在那边给数组赋值时遇到问题:
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at "SYSTEM.REPLACE_SYNONYMS", line 35
ORA-06512: at "SYSTEM.REPLACE_SYNONYMS", line 35
35: array(v_idx):= regexp_replace(
p_text, '(^|[^a-z0-9])' || i.text || '($|[^a-z0-9])',
'\1' || i.word || '\2', 1, 0, 'i');
对应于以下值:
array(2):= regexp_replace(
'MOUNTAIN VIEW SYN GROWERS', '(^|[^a-z0-9])' || 'SYN' || '($|[^a-z0-9])',
'\1' || 'STORE' || '\2', 1, 0, 'i');
请查看dbFiddle以获取详细信息和确切情况。
如何获得要在SQL查询中使用的数组?这可能吗?
谢谢
错误ORA-06502: PL/SQL: numeric or value error: character to number conversion error
被证明是与数组大小有关的错误。然后增加varray的值可解决问题:
create type array_t is varray(100) of varchar2(4000);
/