Affects PMD Version:
This error was testing in the following versions:
Description:
Trying to analyze pl/sql code that has OPEN ref_cursor_name FOR statement, PMD raises an exception error that indicates "Error while parsing".
Exception Stacktrace:
net.sourceforge.pmd.PMDException: Error while parsing C:\testfolder\example_procedure.prc
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:116)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:95)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:57)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:85)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:29)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: net.sourceforge.pmd.lang.plsql.ast.ParseException: Encountered " "SELECT" "SELECT "" at line 25, column 10.
Was expecting one of:
"LOG" ...
"(" ...
"REF" ...
"LAST" ...
"*" ...
"+" ...
"OVER" ...
"UNBOUNDED" ...
"PRECEDING" ...
"FOLLOWING" ...
"WITHIN" ...
...
"(" ...
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.generateParseException(PLSQLParser.java)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.jj_consume_token(PLSQLParser.java)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Expression(PLSQLParser.java:38993)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.OpenStatement(PLSQLParser.java:36111)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.UnlabelledStatement(PLSQLParser.java:23931)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Statement(PLSQLParser.java:24741)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.IfStatement(PLSQLParser.java:33772)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.UnlabelledStatement(PLSQLParser.java:23884)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Statement(PLSQLParser.java:24741)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.ProgramUnit(PLSQLParser.java:6835)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Global(PLSQLParser.java:879)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Input(PLSQLParser.java:153)
at net.sourceforge.pmd.lang.plsql.PLSQLParser.parse(PLSQLParser.java:61)
at net.sourceforge.pmd.SourceCodeProcessor.parse(SourceCodeProcessor.java:127)
at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:191)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:113)
... 10 more
Code Sample demonstrating the issue:
CREATE OR REPLACE PROCEDURE EXAMPLE_PROCEDURE IS
--
TYPE t_ref_cursor IS REF CURSOR;
--
l_ref_cursor t_ref_cursor;
--
BEGIN
--
OPEN l_ref_cursor FOR
SELECT *
FROM DUAL;
--
END EXAMPLE_PROCEDURE;
Steps to reproduce:
Running PMD through: [CLI]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4