我有一个相关的问题,并试图实现他们对我的问题的回答。当我尝试使用他们提出的解决方案时,我得到 ORA-01722: invalid number。
这是我的桌子
CREATE TABLE TEMP_PARSE_EXIST
(
PHYS_ST_ADRS VARCHAR2(64 CHAR),
PHYS_ADRS_LN2 VARCHAR2(64 CHAR),
PHYS_COM_NM VARCHAR2(50 CHAR),
PROV VARCHAR2(10 CHAR),
PSTL_CD VARCHAR2(16 CHAR),
CNTRY VARCHAR2(50 CHAR),
MAIL_ADRS VARCHAR2(64 CHAR),
MAIL_ADRS_LN2 VARCHAR2(64 CHAR),
MAIL_COM_NM VARCHAR2(50 CHAR),
MAIL_PROV VARCHAR2(10 CHAR),
MAIL_PSTL_CD VARCHAR2(16 CHAR),
ADRS VARCHAR2(64),
V_DIRN VARCHAR2(2),
V_NUM VARCHAR2(8),
V_STREET_NAME VARCHAR2(64),
V_SECOND_LINE VARCHAR2(64),
V_STREET_TYPE VARCHAR2(64),
V_POSTAL VARCHAR2(7),
V_COMM_NM VARCHAR2(64),
R_REC_TYP_CD VARCHAR2(1),
ADT_ACT VARCHAR2(200 CHAR)
);
运行代码的下一部分时,它发生在表被截断并从原始数据源重新填充之后。我总是确保在运行测试时截断并重新填充,以确保以前的结果不会受到干扰。
这些第一次更新用于确定 100 Ave 和 100th Ave 是否有效。
DECLARE
ALLOWED_STREETS VARCHAR2(1400 char) := '(ABBEY|ACRES|WHARF|WOOD|WYND)'; --has been cut down for question
BEGIN
--this one is for when the 3rd "word" is one of the street types
--and the 2nd "word" is purly numbers for a building number like 100 street
UPDATE TEMP_PARSE_EXIST
SET ADT_ACT = 'CASE 1', V_NUM = REGEXP_SUBSTR(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+'), '\d+$')
WHERE REGEXP_LIKE(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+\s\w+', 'i'), ALLOWED_STREETS || '$', 'i') --problem line
and REGEXP_LIKE(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+'), '^\w+(\s?-\s?)\d+$')
AND ADT_ACT IS NULL;
--this one is for when the 3rd "word" is one of the street types
--and the 2nd "word" is numbered streets like 1st ave
UPDATE TEMP_PARSE_EXIST
SET ADT_ACT = 'CASE 2', V_STREET_NAME = REGEXP_SUBSTR(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+'), '\d+(ST|ND|RD|TH)$')
WHERE REGEXP_LIKE(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+\s\w+', 'i'), ALLOWED_STREETS || '$', 'i') --problem line
AND REGEXP_LIKE(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+'), '^\w+(\s?-\s?)\d+(ST|ND|RD|TH)$')
AND ADT_ACT IS NULL;
END;
当标记为问题的行被删除时,它会运行,但结果不是我想要的。
所以我正在做的是处理包括建筑物编号、子单元、街道名称、街道类型、方向的 adrs 数据。我目前正在尝试解析子单元和建筑物编号何时连接在一起以及何时不连接。因此,对于可能存在的各种方法,我将设置的条件将非常严格。
因此,虽然我正在处理的数据中有数字,但它们被存储为字符,并且它们存储的字段是 varchar2,并且没有正在完成的数字操作(我知道)。那么为什么无效号码错误,我该如何解决呢?