【发布时间】:2019-11-25 23:56:37
【问题描述】:
一直在研究基于替换出现在同义词和单词替换列表中的单词来替换字符串中的单词的问题。根据替换,一个字符串可以生成多个字符串。这个想法是将字符串的可能替换为可以在 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 查询中使用?这可能吗?
谢谢
【问题讨论】:
-
请编辑问题并发布minimal reproducible example,而不仅仅是第 35 行。谢谢
-
请仔细阅读,在问题中(我不仅分享了功能,还分享了设置)。
标签: arrays database oracle plsql sql-like