得到错误“参数'0'超出范围”

时间:2017-10-05 10:38:37

标签: sql oracle

我收到错误“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标签可能不止一次,这就是为什么推迟最后一个条件。   你能帮忙吗?

1 个答案:

答案 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
)