Get parse error when use a plsql keyword as a name
Status: Alpha
Brought to you by:
altumano
PLDoc: 1.1.2
Oracle: 11.2.0.1.0
If I have the following plsql:
CREATE OR REPLACE PACKAGE TESTCONSTANTS IS
map CONSTANT VARCHAR2(4) := 'map';
END;
/
CREATE OR REPLACE PACKAGE BODY TEST_API IS
PROCEDURE Test
IS
BEGIN
dbms_output.put_line (TESTCONSTANTS.map);
END Test;
END;
/
Then I get a parse exception:
ParseException at package <test_api.pkb>: net.sourceforge.pldoc.parser.ParseException: Encountered "
"." ". "" at line 15, column 38.
Was expecting one of:
"/" ...
"," ...
")" ...
But it is accepted fine by plsql.
STATIC added and checked.
The problem is that most keywords are usable as names, but allowing all such keywords in one go tends to break the PL/SQL parser.
I will attempt to add and test them one or two at a time (STATIC keyword just added and an unreserved keyword).
The problem ones are:-
"
Token ID(): {}
{
(<IDENTIFIER>
| <QUOTED_LITERAL>
| KEYWORD_UNRESERVED() //SRT 2011-04-17
/*KEYWORDS_UNRESERVED
|<EXTRACT> | <FALSE> | <TRUE> | <SECOND> | <MINUTE> | <HOUR> | <DAY> | <MONTH> | <YEAR>
| <NO> |<ROW> | <COMMENT> | <CURSOR>
*/
|
<REPLACE> | <DEFINER> | <SERIALLY_REUSABLE> | <RESTRICT_REFERENCES> |
<EXCEPTION_INIT> | <AUTONOMOUS_TRANSACTION> // | <LANGUAGE>
|
<ALL> | <ALTER> | <AND> | <ANY> | <ARRAY> | <AS> | <ASC> | <AT> | <AUTHID> | <AVG> |
// <BEGIN> |
<BETWEEN> | <BINARY_INTEGER> | <BODY> | <BOOLEAN> | <BULK> | <BY> | <BYTE> |
<CASE> | <CHAR> | <CHAR_BASE> | <CHECK> | <CLOSE> | <CLUSTER> |//-<COALESCE> |
<COLLECT> | <COMPRESS> | <CONNECT> | <CONSTANT> | <CREATE> |
<CURRENT> | <CURRVAL> | <DATE> | <DECLARE> | <DECIMAL> |
<_DEFAULT> | <DELETE> | <DESC> | <DISTINCT> | <DO> | <DROP> | <ELSE> | <ELSIF> |
// <END> |<CURRENT_USER> |
<EXCEPTION> | <EXCLUSIVE> | <EXECUTE> | <EXISTS> | <EXIT> | <EXTENDS>
| <FETCH> | <FLOAT> | <FOR> | <FORALL> | <FROM> |
// <COMMIT> | <FUNCTION> | // this causes bug 643043 Procedure w/o params appears as variable
<GOTO> | <GROUP> | <HAVING> | <HEAP> | <IF> | <IMMEDIATE> | <IN> |
<INDEX> | <INDICATOR> | <INSERT> | <INTEGER> | <INTERFACE> | <INTERSECT> | <INTERVAL> |
<INTO> | <IS> | <ISOLATION> | <JAVA> | <LEVEL> | <LIKE> | <LIMITED> | <LOCK> |
<LONG> | <LOOP> | <MAX> | <MIN> | <MINUS> | <MLSLABEL> | <MOD> | <MODE> |
<NATURAL> | <NATURALN> | <NEXTVAL> | <NOCOPY> | <NOT> | <NOWAIT> |
<NULL> | <NULLIF> | <NUMBER> | <NUMBER_BASE> | <OCIROWID> | <OF> | <ON> | <OPAQUE> |
<BFILE_BASE> |
<BLOB_BASE> |
//<CHAR_BASE> |
<CLOB_BASE> |
<DATE_BASE> |
<OPEN> | <OPERATOR> | <OPTION> | <OR> | <ORDER> | <ORGANIZATION> //| <OTHERS>
| <OUT> |
<PACKAGE> | <PCTFREE> | <PLS_INTEGER> | <POSITIVE> | <POSITIVEN> |
// <PRAGMA> |<PARTITION> | <RANGE> | <NEW> | <OLD> |
<PRIOR> | <PRIVATE> | <PROMPT> |
// <PROCEDURE> | // this causes bug 643043 Procedure w/o params appears as variable
<PUBLIC> | <RAISE> | <RAW> | <REAL> |
//<RECORD> | <RETURN> | <SET> |<REF> |
<RELEASE> | <REVERSE> | <ROLLBACK> | <ROWID> |
<ROWNUM> | <ROWTYPE> | <SAVEPOINT> | <SELECT> | <SEPARATE> | <SHARE> |
<SMALLINT> | <SQL> | <SQLCODE> | <SQLERRM> | <START> | <STDDEV> | // <SUBTYPE> |
<SUCCESSFUL> | <SUM> | <SYNONYM> | <SYSDATE> | <TABLE> | <THEN> |
//<SPACE> | <TIME> | <TIMESTAMP> | <TIMEZONE_REGION> | <TIMEZONE_ABBR> | <TIMEZONE_MINUTE> | <TIMEZONE_HOUR> |
<TO> | <TRIGGER> |
<TYPE> | <UI> | <UPDATE>
|
<VARCHAR> | <VARCHAR2> | <DOUBLE> | <DEC> | <PRECISION> | <INT> |
<NUMERIC> | <SIGNTYPE> | <NCHAR> | <NVARCHAR2> | <STRING> | <UROWID> | <VARRAY> | <VARYING> | <BFILE> |
<BLOB> | <CLOB> | <NCLOB> | <WITH> | <WHILE> // | <LOCAL> | <ZONE> | <CHARACTER>
//| <PARENT> | <MEMBER>
| <CONSTRUCTOR> | <OBJECT>
//PLDoc Bug 3512150 | <STATIC>
| <UNDER> | <RESULT>
| <FINAL> | <INSTANTIABLE>
// PlDoc Bug 3512150 | <MAP>
| <OVERRIDING>
| <OID>
| <AGGREGATE>
//| <SYS_REFCURSOR>
| <JAVA_INTERFACE_CLASS> | <SQLDATA_CLASS> | <CUSTOMDATUM_CLASS> | <ORADATA_CLASS>
| <EXTERNAL>
//SRT 20090608 ALTER TYPE key words
//| <ADD>
//PLDoc Bug 3512149 | <ATTRIBUTE>
//| <ELEMENT>
//| <LIMIT>
| <MODIFY>
//SRT 20110524 | <SELF>
)
{ return token; }
}
"
Addressed in PLDoc 1.1.3
I think I am getting this same bug, in 1.5.5 of pldoc and maven plugin 3.0.1. We have a procedure called 'rename' and its causing an error:
ParseException at package </Users>: net.sourceforge.pldoc.parser.ParseException: Encountered " "RENAME" "rename "" at line 94, column 13.
Try 1.5.6 / 3.0.2
It seems that even though it is a reserved word (in V$RESERVED_WORDS), it may be used in PL/SQL
That did the trunk, cheers Stuart.
On 04/08/2013, at 6:40 PM, Stuart Turton sturton@users.sf.net wrote:
Related
Bugs: #91