私は、関連するquestionを持っており、私の問題に対する答えを実装しようとしています。 提案されたソリューションを使用しようとすると、ORA-01722:無効な番号が表示されます。無効な番号エラー
は、ここでは、コードの次の部分を実行している場合は、テーブルが切り捨てられ、元のデータソースから再作成されます後、それが来る私のテーブル
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と100 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であり、実行されている数値演算(私が知っている)はありません。だからなぜ無効な番号のエラー、そして私はそれを修正することができますか?
あなたは間違いなく正しいと私はこれまでに行っています。私はregexp_likeをはるかに頻繁に使用していますので、私はこの形式に慣れています。 – DanSask