INSTR(ltrim(pn.pname),'REFERENCE ID=')
renvoie 0 (indiquant que la sous-chaîne que vous recherchez n'a pas été trouvée) et si vous essayez de faire :
REGEXP_SUBSTR( value, regex, 0 )
Vous obtiendrez l'erreur :
ORA-01428: argument '0' is out of range
À la place, vous pouvez utiliser :
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
)