【问题标题】:Arrays in PL/SQL function as return type returning ORA-06502: PL/SQL: numeric or value error: character to number conversion errorPL/SQL 中的数组作为返回类型返回 ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误
【发布时间】: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


【解决方案1】:

错误ORA-06502: PL/SQL: numeric or value error: character to number conversion error原来是与数组大小有关的错误。然后增加 varray 的值解决了这个问题:

create type array_t is varray(100) of varchar2(4000);
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多