There are PL/SQL language constructs missing in parser, which cause the code scan to fail.
The language syntax is described here:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions014.htm
this causes the following code snippet to fail:
...
member PROCEDURE InsClientTrans (
inChannelID IN number,
inOperID IN number,
inClientId IN number,
ioFPOobj IN FPO_OBJ,
inPackageIDout IN number,
inStatusId IN number)
is
loFPOGE_OBJ FPOGE_OBJ;
BEGIN
IF ioFPOobj IS OF (FPOGE_OBJ) THEN
loFPOGE_OBJ:=treat(ioFPOobj AS FPOGE_OBJ);
end if;
end;
...
The language syntax is described here:
https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems034.htm
The problematic part is the using clause and the in specifiaction for bind parameter:
open cursor for query USING IN variable
This bug will be fixed with PMD 5.3.8, 5.4.3, 5.5.2 and later.
Commit: https://gitub.com/pmd/pmd/commit/4ab1d0cbeee7406c4a7da13d9fca6670918bc0f9