我收到错误“ORA-01428:参数'0'超出范围”。 有问题的主题是:
regexp_substr(ltrim(pn.pname),'\d+',INSTR(ltrim(pn.pname),'REFERENCE ID='))
当我滚动更多记录时,它会发出错误。
示例:
pname regexp value
FragIT<REFERENCE ID="6998" 6998
TYPE="trademark"/> MicroSpin
我正在使用这样的总查询:
SELECT pname,
regexp_substr(ltrim(pn.sys_name_text),'\d+',INSTR(ltrim(pn.sys_name_text),
'REFERENCE ID=')) comm from products p
left join product_names pn using(product_id)
where pname like '%trademark%' and language_id = 1
and regexp_count(pname,'trademark') <= 1
这里的refrence标签可能不止一次,这就是为什么推迟最后一个条件。 你能帮忙吗?
答案 0 :(得分:1)
INSTR(ltrim(pn.pname),'REFERENCE ID=')
返回0(表示找不到您要搜索的子字符串),如果您尝试这样做:
REGEXP_SUBSTR( value, regex, 0 )
您将收到错误:
ORA-01428: argument '0' is out of range
相反,您可以使用:
REGEXP_SUBSTR(
pn.pname,
'REFERENCE ID="(\d+)"',
1, -- Start from the 1st character
1, -- Find the 1st occurrence
NULL, -- No flags
1 -- Return the contents of the 1st capturing group
)