[plsql] Support exception handlers in compound triggers
- allow multiple exception handlers - parse declarative section correctly in compound triggers - CASE, CURSOR, DECLARE, EXECUTE, IF, PUBLIC, SQL are reserved words and cannot be used as an identifiers Fixes #4270
This commit is contained in:
@ -20,6 +20,7 @@ This is a {{ site.pmd.release_type }} release.
|
||||
* plsql
|
||||
* [#1934](https://github.com/pmd/pmd/issues/1934): \[plsql] ParseException with MERGE statement in anonymous block
|
||||
* [#2779](https://github.com/pmd/pmd/issues/2779): \[plsql] Error while parsing statement with (Oracle) DML Error Logging
|
||||
* [#4270](https://github.com/pmd/pmd/issues/4270): \[plsql] Parsing exception COMPOUND TRIGGER with EXCEPTION handler
|
||||
|
||||
### 🚨 API Changes
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -51,4 +51,9 @@ class PlsqlTreeDumpTest extends BaseTreeDumpTest {
|
||||
void errorLoggingClause() {
|
||||
doTest("ErrorLoggingClause2779");
|
||||
}
|
||||
|
||||
@Test
|
||||
void compoundTriggerWithAdditionalDeclarations() {
|
||||
doTest("CompoundTriggerWithAdditionalDeclarations4270");
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
--
|
||||
-- BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
--
|
||||
|
||||
-- https://github.com/pmd/pmd/issues/4270
|
||||
|
||||
-- TRIGGER EXAMPLE
|
||||
CREATE OR REPLACE TRIGGER EXAMPLE_TRIGGER
|
||||
FOR INSERT ON TEST_TABLE
|
||||
COMPOUND TRIGGER
|
||||
--
|
||||
l_number_one NUMBER(2) := ROUND(DBMS_RANDOM.Value(1, 10));
|
||||
l_number_two NUMBER(2) := ROUND(DBMS_RANDOM.Value(1, 10));
|
||||
--
|
||||
BEFORE EACH ROW IS
|
||||
--
|
||||
-- This is not officially documented, but might be possible - declarations before the begin block
|
||||
l_tot_numbers NUMBER(2);
|
||||
--
|
||||
BEGIN
|
||||
--
|
||||
l_tot_numbers := l_number_one + l_number_two;
|
||||
--
|
||||
:NEW.col_one := l_number_one;
|
||||
:NEW.col_two := l_number_two;
|
||||
:NEW.col_three := l_tot_numbers;
|
||||
--
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
RAISE_APPLICATION_ERROR(-20001, 'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW' || CHR(10) || SQLERRM);
|
||||
END BEFORE EACH ROW;
|
||||
--
|
||||
--
|
||||
AFTER STATEMENT IS
|
||||
BEGIN
|
||||
--
|
||||
DBMS_OUTPUT.Put_Line('This is just an example!');
|
||||
--
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
RAISE_APPLICATION_ERROR(-20002, 'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT' || CHR(10) || SQLERRM);
|
||||
END AFTER STATEMENT;
|
||||
--
|
||||
END EXAMPLE_TRIGGER;
|
||||
|
@ -0,0 +1,239 @@
|
||||
+- Input[@CanonicalImage = null, @ExcludedLinesCount = 0, @ExcludedRangesCount = 0]
|
||||
+- TriggerUnit[@CanonicalImage = "EXAMPLE_TRIGGER", @Image = "EXAMPLE_TRIGGER", @MethodName = "EXAMPLE_TRIGGER", @Name = "EXAMPLE_TRIGGER", @ObjectName = "EXAMPLE_TRIGGER"]
|
||||
+- ObjectNameDeclaration[@CanonicalImage = "EXAMPLE_TRIGGER", @Image = "EXAMPLE_TRIGGER"]
|
||||
| +- ID[@CanonicalImage = "EXAMPLE_TRIGGER", @Image = "EXAMPLE_TRIGGER"]
|
||||
+- ID[@CanonicalImage = "TEST_TABLE", @Image = "TEST_TABLE"]
|
||||
+- CompoundTriggerBlock[@CanonicalImage = null]
|
||||
+- DeclarativeSection[@CanonicalImage = null]
|
||||
| +- DeclarativeUnit[@CanonicalImage = null]
|
||||
| | +- VariableOrConstantDeclaration[@CanonicalImage = null]
|
||||
| | +- VariableOrConstantDeclarator[@CanonicalImage = "L_NUMBER_ONE NUMBER(2) := ROUND", @Image = "l_number_one NUMBER(2) := ROUND"]
|
||||
| | +- VariableOrConstantDeclaratorId[@Array = false, @ArrayDepth = 0, @CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| | | +- ID[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| | +- Datatype[@CanonicalImage = "NUMBER(2)", @Image = "NUMBER(2)", @TypeImage = "NUMBER(2)"]
|
||||
| | | +- ScalarDataTypeName[@CanonicalImage = "NUMBER(2)", @Image = "NUMBER(2)"]
|
||||
| | | +- NumericLiteral[@CanonicalImage = "2", @Image = "2"]
|
||||
| | +- VariableOrConstantInitializer[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| | +- Expression[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "ROUND", @Image = "ROUND", @SelfModifier = false]
|
||||
| | +- FunctionCall[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| | +- FunctionName[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| | | +- ID[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| | +- Arguments[@ArgumentCount = 1, @CanonicalImage = null]
|
||||
| | +- ArgumentList[@CanonicalImage = null]
|
||||
| | +- Argument[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "DBMS_RANDOM.VALUE", @Image = "DBMS_RANDOM.Value"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "DBMS_RANDOM.VALUE", @Image = "DBMS_RANDOM.Value", @SelfModifier = false]
|
||||
| | +- FunctionCall[@CanonicalImage = "DBMS_RANDOM.VALUE", @Image = "DBMS_RANDOM.Value"]
|
||||
| | +- FunctionName[@CanonicalImage = "DBMS_RANDOM.VALUE", @Image = "DBMS_RANDOM.Value"]
|
||||
| | | +- ID[@CanonicalImage = "DBMS_RANDOM", @Image = "DBMS_RANDOM"]
|
||||
| | | +- ID[@CanonicalImage = "VALUE", @Image = "Value"]
|
||||
| | +- Arguments[@ArgumentCount = 2, @CanonicalImage = null]
|
||||
| | +- ArgumentList[@CanonicalImage = null]
|
||||
| | +- Argument[@CanonicalImage = null]
|
||||
| | | +- Expression[@CanonicalImage = "1", @Image = "1"]
|
||||
| | | +- PrimaryPrefix[@CanonicalImage = "1", @Image = "1", @SelfModifier = false]
|
||||
| | | +- Literal[@CanonicalImage = "1", @Image = "1"]
|
||||
| | | +- NumericLiteral[@CanonicalImage = "1", @Image = "1"]
|
||||
| | +- Argument[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "10", @Image = "10"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "10", @Image = "10", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "10", @Image = "10"]
|
||||
| | +- NumericLiteral[@CanonicalImage = "10", @Image = "10"]
|
||||
| +- DeclarativeUnit[@CanonicalImage = null]
|
||||
| +- VariableOrConstantDeclaration[@CanonicalImage = null]
|
||||
| +- VariableOrConstantDeclarator[@CanonicalImage = "L_NUMBER_TWO NUMBER(2) := ROUND", @Image = "l_number_two NUMBER(2) := ROUND"]
|
||||
| +- VariableOrConstantDeclaratorId[@Array = false, @ArrayDepth = 0, @CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| | +- ID[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| +- Datatype[@CanonicalImage = "NUMBER(2)", @Image = "NUMBER(2)", @TypeImage = "NUMBER(2)"]
|
||||
| | +- ScalarDataTypeName[@CanonicalImage = "NUMBER(2)", @Image = "NUMBER(2)"]
|
||||
| | +- NumericLiteral[@CanonicalImage = "2", @Image = "2"]
|
||||
| +- VariableOrConstantInitializer[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| +- Expression[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "ROUND", @Image = "ROUND", @SelfModifier = false]
|
||||
| +- FunctionCall[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| +- FunctionName[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| | +- ID[@CanonicalImage = "ROUND", @Image = "ROUND"]
|
||||
| +- Arguments[@ArgumentCount = 1, @CanonicalImage = null]
|
||||
| +- ArgumentList[@CanonicalImage = null]
|
||||
| +- Argument[@CanonicalImage = null]
|
||||
| +- Expression[@CanonicalImage = "DBMS_RANDOM.VALUE", @Image = "DBMS_RANDOM.Value"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "DBMS_RANDOM.VALUE", @Image = "DBMS_RANDOM.Value", @SelfModifier = false]
|
||||
| +- FunctionCall[@CanonicalImage = "DBMS_RANDOM.VALUE", @Image = "DBMS_RANDOM.Value"]
|
||||
| +- FunctionName[@CanonicalImage = "DBMS_RANDOM.VALUE", @Image = "DBMS_RANDOM.Value"]
|
||||
| | +- ID[@CanonicalImage = "DBMS_RANDOM", @Image = "DBMS_RANDOM"]
|
||||
| | +- ID[@CanonicalImage = "VALUE", @Image = "Value"]
|
||||
| +- Arguments[@ArgumentCount = 2, @CanonicalImage = null]
|
||||
| +- ArgumentList[@CanonicalImage = null]
|
||||
| +- Argument[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "1", @Image = "1"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "1", @Image = "1", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "1", @Image = "1"]
|
||||
| | +- NumericLiteral[@CanonicalImage = "1", @Image = "1"]
|
||||
| +- Argument[@CanonicalImage = null]
|
||||
| +- Expression[@CanonicalImage = "10", @Image = "10"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "10", @Image = "10", @SelfModifier = false]
|
||||
| +- Literal[@CanonicalImage = "10", @Image = "10"]
|
||||
| +- NumericLiteral[@CanonicalImage = "10", @Image = "10"]
|
||||
+- TriggerTimingPointSection[@CanonicalImage = "BEFORE ROW", @Image = "BEFORE ROW", @MethodName = "BEFORE ROW", @Name = "BEFORE ROW"]
|
||||
| +- DeclarativeSection[@CanonicalImage = null]
|
||||
| | +- DeclarativeUnit[@CanonicalImage = null]
|
||||
| | +- VariableOrConstantDeclaration[@CanonicalImage = null]
|
||||
| | +- VariableOrConstantDeclarator[@CanonicalImage = "L_TOT_NUMBERS NUMBER(2)", @Image = "l_tot_numbers NUMBER(2)"]
|
||||
| | +- VariableOrConstantDeclaratorId[@Array = false, @ArrayDepth = 0, @CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| | | +- ID[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| | +- Datatype[@CanonicalImage = "NUMBER(2)", @Image = "NUMBER(2)", @TypeImage = "NUMBER(2)"]
|
||||
| | +- ScalarDataTypeName[@CanonicalImage = "NUMBER(2)", @Image = "NUMBER(2)"]
|
||||
| | +- NumericLiteral[@CanonicalImage = "2", @Image = "2"]
|
||||
| +- Statement[@CanonicalImage = null]
|
||||
| | +- UnlabelledStatement[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "L_TOT_NUMBERS := L_NUMBER_ONE + L_NUMBER_TWO", @Image = "l_tot_numbers := l_number_one + l_number_two"]
|
||||
| | +- Assignment[@CanonicalImage = "L_TOT_NUMBERS := L_NUMBER_ONE + L_NUMBER_TWO", @Image = "l_tot_numbers := l_number_one + l_number_two"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers", @SelfModifier = false]
|
||||
| | | +- SimpleExpression[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| | | +- Column[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| | | +- ID[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| | +- Expression[@CanonicalImage = "L_NUMBER_ONE + L_NUMBER_TWO", @Image = "l_number_one + l_number_two"]
|
||||
| | +- AdditiveExpression[@CanonicalImage = "L_NUMBER_ONE + L_NUMBER_TWO", @Image = "l_number_one + l_number_two"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one", @SelfModifier = false]
|
||||
| | | +- SimpleExpression[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| | | +- Column[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| | | +- ID[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two", @SelfModifier = false]
|
||||
| | +- SimpleExpression[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| | +- Column[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| | +- ID[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| +- Statement[@CanonicalImage = null]
|
||||
| | +- UnlabelledStatement[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = ":NEW.COL_ONE := L_NUMBER_ONE", @Image = ":NEW.col_one := l_number_one"]
|
||||
| | +- Assignment[@CanonicalImage = ":NEW.COL_ONE := L_NUMBER_ONE", @Image = ":NEW.col_one := l_number_one"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = ":NEW.COL_ONE", @Image = ":NEW.col_one", @SelfModifier = false]
|
||||
| | | +- SimpleExpression[@CanonicalImage = ":NEW.COL_ONE", @Image = ":NEW.col_one"]
|
||||
| | | +- TableName[@CanonicalImage = ":NEW", @Image = ":NEW"]
|
||||
| | | | +- ID[@CanonicalImage = ":NEW", @Image = ":NEW"]
|
||||
| | | +- Column[@CanonicalImage = "COL_ONE", @Image = "col_one"]
|
||||
| | | +- ID[@CanonicalImage = "COL_ONE", @Image = "col_one"]
|
||||
| | +- Expression[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one", @SelfModifier = false]
|
||||
| | +- SimpleExpression[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| | +- Column[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| | +- ID[@CanonicalImage = "L_NUMBER_ONE", @Image = "l_number_one"]
|
||||
| +- Statement[@CanonicalImage = null]
|
||||
| | +- UnlabelledStatement[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = ":NEW.COL_TWO := L_NUMBER_TWO", @Image = ":NEW.col_two := l_number_two"]
|
||||
| | +- Assignment[@CanonicalImage = ":NEW.COL_TWO := L_NUMBER_TWO", @Image = ":NEW.col_two := l_number_two"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = ":NEW.COL_TWO", @Image = ":NEW.col_two", @SelfModifier = false]
|
||||
| | | +- SimpleExpression[@CanonicalImage = ":NEW.COL_TWO", @Image = ":NEW.col_two"]
|
||||
| | | +- TableName[@CanonicalImage = ":NEW", @Image = ":NEW"]
|
||||
| | | | +- ID[@CanonicalImage = ":NEW", @Image = ":NEW"]
|
||||
| | | +- Column[@CanonicalImage = "COL_TWO", @Image = "col_two"]
|
||||
| | | +- ID[@CanonicalImage = "COL_TWO", @Image = "col_two"]
|
||||
| | +- Expression[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two", @SelfModifier = false]
|
||||
| | +- SimpleExpression[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| | +- Column[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| | +- ID[@CanonicalImage = "L_NUMBER_TWO", @Image = "l_number_two"]
|
||||
| +- Statement[@CanonicalImage = null]
|
||||
| | +- UnlabelledStatement[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = ":NEW.COL_THREE := L_TOT_NUMBERS", @Image = ":NEW.col_three := l_tot_numbers"]
|
||||
| | +- Assignment[@CanonicalImage = ":NEW.COL_THREE := L_TOT_NUMBERS", @Image = ":NEW.col_three := l_tot_numbers"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = ":NEW.COL_THREE", @Image = ":NEW.col_three", @SelfModifier = false]
|
||||
| | | +- SimpleExpression[@CanonicalImage = ":NEW.COL_THREE", @Image = ":NEW.col_three"]
|
||||
| | | +- TableName[@CanonicalImage = ":NEW", @Image = ":NEW"]
|
||||
| | | | +- ID[@CanonicalImage = ":NEW", @Image = ":NEW"]
|
||||
| | | +- Column[@CanonicalImage = "COL_THREE", @Image = "col_three"]
|
||||
| | | +- ID[@CanonicalImage = "COL_THREE", @Image = "col_three"]
|
||||
| | +- Expression[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers", @SelfModifier = false]
|
||||
| | +- SimpleExpression[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| | +- Column[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| | +- ID[@CanonicalImage = "L_TOT_NUMBERS", @Image = "l_tot_numbers"]
|
||||
| +- ExceptionHandler[@CanonicalImage = null]
|
||||
| +- Statement[@CanonicalImage = null]
|
||||
| +- UnlabelledStatement[@CanonicalImage = null]
|
||||
| +- Expression[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR", @SelfModifier = false]
|
||||
| +- FunctionCall[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR"]
|
||||
| +- FunctionName[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR"]
|
||||
| | +- ID[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR"]
|
||||
| +- Arguments[@ArgumentCount = 2, @CanonicalImage = null]
|
||||
| +- ArgumentList[@CanonicalImage = null]
|
||||
| +- Argument[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "-20001", @Image = " -20001"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "20001", @Image = "20001", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "20001", @Image = "20001"]
|
||||
| | +- NumericLiteral[@CanonicalImage = "20001", @Image = "20001"]
|
||||
| +- Argument[@CanonicalImage = null]
|
||||
| +- Expression[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\' || CHR || SQLERRM", @Image = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\' || CHR || SQLERRM"]
|
||||
| +- AdditiveExpression[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\' || CHR || SQLERRM", @Image = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\' || CHR || SQLERRM"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\'", @Image = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\'", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\'", @Image = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\'"]
|
||||
| | +- StringLiteral[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\'", @Image = "\'ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW\'", @String = "ERROR AT EXAMPLE_TRIGGER - BEFORE EACH ROW"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "CHR", @Image = "CHR", @SelfModifier = false]
|
||||
| | +- FunctionCall[@CanonicalImage = "CHR", @Image = "CHR"]
|
||||
| | +- FunctionName[@CanonicalImage = "CHR", @Image = "CHR"]
|
||||
| | | +- ID[@CanonicalImage = "CHR", @Image = "CHR"]
|
||||
| | +- Arguments[@ArgumentCount = 1, @CanonicalImage = null]
|
||||
| | +- ArgumentList[@CanonicalImage = null]
|
||||
| | +- Argument[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "10", @Image = "10"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "10", @Image = "10", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "10", @Image = "10"]
|
||||
| | +- NumericLiteral[@CanonicalImage = "10", @Image = "10"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "SQLERRM", @Image = "SQLERRM", @SelfModifier = false]
|
||||
| +- SimpleExpression[@CanonicalImage = "SQLERRM", @Image = "SQLERRM"]
|
||||
| +- Column[@CanonicalImage = "SQLERRM", @Image = "SQLERRM"]
|
||||
| +- ID[@CanonicalImage = "SQLERRM", @Image = "SQLERRM"]
|
||||
+- TriggerTimingPointSection[@CanonicalImage = "AFTER STATEMENT", @Image = "AFTER STATEMENT", @MethodName = "AFTER STATEMENT", @Name = "AFTER STATEMENT"]
|
||||
| +- Statement[@CanonicalImage = null]
|
||||
| | +- UnlabelledStatement[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "DBMS_OUTPUT.PUT_LINE", @Image = "DBMS_OUTPUT.Put_Line"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "DBMS_OUTPUT.PUT_LINE", @Image = "DBMS_OUTPUT.Put_Line", @SelfModifier = false]
|
||||
| | +- FunctionCall[@CanonicalImage = "DBMS_OUTPUT.PUT_LINE", @Image = "DBMS_OUTPUT.Put_Line"]
|
||||
| | +- FunctionName[@CanonicalImage = "DBMS_OUTPUT.PUT_LINE", @Image = "DBMS_OUTPUT.Put_Line"]
|
||||
| | | +- ID[@CanonicalImage = "DBMS_OUTPUT", @Image = "DBMS_OUTPUT"]
|
||||
| | | +- ID[@CanonicalImage = "PUT_LINE", @Image = "Put_Line"]
|
||||
| | +- Arguments[@ArgumentCount = 1, @CanonicalImage = null]
|
||||
| | +- ArgumentList[@CanonicalImage = null]
|
||||
| | +- Argument[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "\'THIS IS JUST AN EXAMPLE!\'", @Image = "\'This is just an example!\'"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "\'THIS IS JUST AN EXAMPLE!\'", @Image = "\'This is just an example!\'", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "\'THIS IS JUST AN EXAMPLE!\'", @Image = "\'This is just an example!\'"]
|
||||
| | +- StringLiteral[@CanonicalImage = "\'THIS IS JUST AN EXAMPLE!\'", @Image = "\'This is just an example!\'", @String = "This is just an example!"]
|
||||
| +- ExceptionHandler[@CanonicalImage = null]
|
||||
| +- Statement[@CanonicalImage = null]
|
||||
| +- UnlabelledStatement[@CanonicalImage = null]
|
||||
| +- Expression[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR", @SelfModifier = false]
|
||||
| +- FunctionCall[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR"]
|
||||
| +- FunctionName[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR"]
|
||||
| | +- ID[@CanonicalImage = "RAISE_APPLICATION_ERROR", @Image = "RAISE_APPLICATION_ERROR"]
|
||||
| +- Arguments[@ArgumentCount = 2, @CanonicalImage = null]
|
||||
| +- ArgumentList[@CanonicalImage = null]
|
||||
| +- Argument[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "-20002", @Image = " -20002"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "20002", @Image = "20002", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "20002", @Image = "20002"]
|
||||
| | +- NumericLiteral[@CanonicalImage = "20002", @Image = "20002"]
|
||||
| +- Argument[@CanonicalImage = null]
|
||||
| +- Expression[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\' || CHR || SQLERRM", @Image = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\' || CHR || SQLERRM"]
|
||||
| +- AdditiveExpression[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\' || CHR || SQLERRM", @Image = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\' || CHR || SQLERRM"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\'", @Image = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\'", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\'", @Image = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\'"]
|
||||
| | +- StringLiteral[@CanonicalImage = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\'", @Image = "\'ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT\'", @String = "ERROR AT EXAMPLE_TRIGGER - AFTER STATEMENT"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "CHR", @Image = "CHR", @SelfModifier = false]
|
||||
| | +- FunctionCall[@CanonicalImage = "CHR", @Image = "CHR"]
|
||||
| | +- FunctionName[@CanonicalImage = "CHR", @Image = "CHR"]
|
||||
| | | +- ID[@CanonicalImage = "CHR", @Image = "CHR"]
|
||||
| | +- Arguments[@ArgumentCount = 1, @CanonicalImage = null]
|
||||
| | +- ArgumentList[@CanonicalImage = null]
|
||||
| | +- Argument[@CanonicalImage = null]
|
||||
| | +- Expression[@CanonicalImage = "10", @Image = "10"]
|
||||
| | +- PrimaryPrefix[@CanonicalImage = "10", @Image = "10", @SelfModifier = false]
|
||||
| | +- Literal[@CanonicalImage = "10", @Image = "10"]
|
||||
| | +- NumericLiteral[@CanonicalImage = "10", @Image = "10"]
|
||||
| +- PrimaryPrefix[@CanonicalImage = "SQLERRM", @Image = "SQLERRM", @SelfModifier = false]
|
||||
| +- SimpleExpression[@CanonicalImage = "SQLERRM", @Image = "SQLERRM"]
|
||||
| +- Column[@CanonicalImage = "SQLERRM", @Image = "SQLERRM"]
|
||||
| +- ID[@CanonicalImage = "SQLERRM", @Image = "SQLERRM"]
|
||||
+- ID[@CanonicalImage = "EXAMPLE_TRIGGER", @Image = "EXAMPLE_TRIGGER"]
|
@ -9,8 +9,8 @@ DECLARE
|
||||
BEGIN
|
||||
OPEN emp_cv FOR -- open cursor variable
|
||||
'SELECT ename, sal FROM emp WHERE sal > :s' USING my_sal;
|
||||
open cursor for 'query' USING variable;
|
||||
open cursor for 'query' USING IN variable;
|
||||
open cursor for 'query' USING OUT variable, IN othervariable;
|
||||
open cursor for 'query' USING IN OUT variable;
|
||||
open cursorvar for 'query' USING variable;
|
||||
open cursorvar for 'query' USING IN variable;
|
||||
open cursorvar for 'query' USING OUT variable, IN othervariable;
|
||||
open cursorvar for 'query' USING IN OUT variable;
|
||||
END;
|
||||
|
@ -327,8 +327,6 @@ CREATE OR REPLACE PACKAGE BODY Foo AS
|
||||
CURRENT_TIMESTAMP IN OUT VARCHAR2,
|
||||
/** Unreserved Keyword Word CURRENT_USER **/
|
||||
CURRENT_USER IN OUT VARCHAR2,
|
||||
/** Unreserved Keyword Word CURSOR **/
|
||||
CURSOR IN OUT VARCHAR2,
|
||||
/** Unreserved Keyword Word CURSOR_SHARING_EXACT **/
|
||||
CURSOR_SHARING_EXACT IN OUT VARCHAR2,
|
||||
/** Unreserved Keyword Word CURSOR_SPECIFIC_SEGMENT **/
|
||||
@ -2253,7 +2251,6 @@ CREATE OR REPLACE PACKAGE BODY Foo AS
|
||||
CURRENT_TIME := 'CURRENT_TIME' ; -- CURRENT_TIME VARCHAR2(240)
|
||||
CURRENT_TIMESTAMP := 'CURRENT_TIMESTAMP' ; -- CURRENT_TIMESTAMP VARCHAR2(240)
|
||||
CURRENT_USER := 'CURRENT_USER' ; -- CURRENT_USER VARCHAR2(240)
|
||||
CURSOR := 'CURSOR' ; -- CURSOR VARCHAR2(240)
|
||||
CURSOR_SHARING_EXACT := 'CURSOR_SHARING_EXACT' ; -- CURSOR_SHARING_EXACT VARCHAR2(240)
|
||||
CURSOR_SPECIFIC_SEGMENT := 'CURSOR_SPECIFIC_SEGMENT' ; -- CURSOR_SPECIFIC_SEGMENT VARCHAR2(240)
|
||||
CYCLE := 'CYCLE' ; -- CYCLE VARCHAR2(240)
|
||||
@ -3156,7 +3153,6 @@ CREATE OR REPLACE PACKAGE BODY Foo AS
|
||||
"COMMENT" := 'COMMENT' ; -- COMMENT VARCHAR2(240)
|
||||
"CURRENT" := 'CURRENT' ; -- CURRENT VARCHAR2(240)
|
||||
"CURRENT_USER" := 'CURRENT_USER' ; -- CURRENT_USER VARCHAR2(240)
|
||||
"CURSOR" := 'CURSOR' ; -- CURSOR VARCHAR2(240)
|
||||
"DEC" := 'DEC' ; -- DEC VARCHAR2(240)
|
||||
"DECLARE" := 'DECLARE' ; -- DECLARE VARCHAR2(240)
|
||||
"DEFINER" := 'DEFINER' ; -- DEFINER VARCHAR2(240)
|
||||
|
@ -105,8 +105,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
BECOME VARCHAR2(240);
|
||||
/** Unreserved Keyword Word BEFORE **/
|
||||
BEFORE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word BEGIN **/
|
||||
--SRT BEGIN VARCHAR2(240);
|
||||
/** Unreserved Keyword Word BEGIN_OUTLINE_DATA **/
|
||||
BEGIN_OUTLINE_DATA VARCHAR2(240);
|
||||
/** Unreserved Keyword Word BEHALF **/
|
||||
@ -187,8 +185,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
CARDINALITY VARCHAR2(240);
|
||||
/** Unreserved Keyword Word CASCADE **/
|
||||
CASCADE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word CASE **/
|
||||
CASE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word CAST **/
|
||||
CAST VARCHAR2(240);
|
||||
/** Unreserved Keyword Word CATEGORY **/
|
||||
@ -325,8 +321,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
CURRENT_TIMESTAMP VARCHAR2(240);
|
||||
/** Unreserved Keyword Word CURRENT_USER **/
|
||||
CURRENT_USER VARCHAR2(240);
|
||||
/** Unreserved Keyword Word CURSOR **/
|
||||
CURSOR VARCHAR2(240);
|
||||
/** Unreserved Keyword Word CURSOR_SHARING_EXACT **/
|
||||
CURSOR_SHARING_EXACT VARCHAR2(240);
|
||||
/** Unreserved Keyword Word CURSOR_SPECIFIC_SEGMENT **/
|
||||
@ -367,8 +361,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
DEBUG VARCHAR2(240);
|
||||
/** Unreserved Keyword Word DEC **/
|
||||
DEC VARCHAR2(240);
|
||||
/** Unreserved Keyword Word DECLARE **/
|
||||
DECLARE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word DECREMENT **/
|
||||
DECREMENT VARCHAR2(240);
|
||||
/** Unreserved Keyword Word DECRYPT **/
|
||||
@ -469,8 +461,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
ENCRYPT VARCHAR2(240);
|
||||
/** Unreserved Keyword Word ENCRYPTION **/
|
||||
ENCRYPTION VARCHAR2(240);
|
||||
/** Unreserved Keyword Word END **/
|
||||
--SRT END VARCHAR2(240);
|
||||
/** Unreserved Keyword Word END_OUTLINE_DATA **/
|
||||
END_OUTLINE_DATA VARCHAR2(240);
|
||||
/** Unreserved Keyword Word ENFORCE **/
|
||||
@ -576,7 +566,7 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
/** Unreserved Keyword Word FOLLOWING **/
|
||||
FOLLOWING VARCHAR2(240);
|
||||
/** Unreserved Keyword Word FORCE **/
|
||||
-- FORCE VARCHAR2(240);
|
||||
FORCE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word FORCE_XML_QUERY_REWRITE **/
|
||||
FORCE_XML_QUERY_REWRITE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word FOREIGN **/
|
||||
@ -591,8 +581,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
FRESH VARCHAR2(240);
|
||||
/** Unreserved Keyword Word FULL **/
|
||||
FULL VARCHAR2(240);
|
||||
/** Unreserved Keyword Word FUNCTION **/
|
||||
--SRT FUNCTION VARCHAR2(240);
|
||||
/** Unreserved Keyword Word FUNCTIONS **/
|
||||
FUNCTIONS VARCHAR2(240);
|
||||
/** Unreserved Keyword Word G **/
|
||||
@ -657,8 +645,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
IDGENERATORS VARCHAR2(240);
|
||||
/** Unreserved Keyword Word IDLE_TIME **/
|
||||
IDLE_TIME VARCHAR2(240);
|
||||
/** Unreserved Keyword Word IF **/
|
||||
IF VARCHAR2(240);
|
||||
/** Unreserved Keyword Word IGNORE **/
|
||||
IGNORE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word IGNORE_OPTIM_EMBEDDED_HINTS **/
|
||||
@ -674,7 +660,7 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
/** Unreserved Keyword Word INCLUDE_VERSION **/
|
||||
INCLUDE_VERSION VARCHAR2(240);
|
||||
/** Unreserved Keyword Word INCLUDING **/
|
||||
-- INCLUDING VARCHAR2(240);
|
||||
INCLUDING VARCHAR2(240);
|
||||
/** Unreserved Keyword Word INCREMENT **/
|
||||
INCREMENT VARCHAR2(240);
|
||||
/** Unreserved Keyword Word INCREMENTAL **/
|
||||
@ -1258,7 +1244,7 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
/** Unreserved Keyword Word ONLINE **/
|
||||
ONLINE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word ONLY **/
|
||||
-- ONLY VARCHAR2(240);
|
||||
ONLY VARCHAR2(240);
|
||||
/** Unreserved Keyword Word OPAQUE **/
|
||||
OPAQUE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word OPAQUE_TRANSFORM **/
|
||||
@ -1433,8 +1419,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
PRIVILEGE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word PRIVILEGES **/
|
||||
PRIVILEGES VARCHAR2(240);
|
||||
/** Unreserved Keyword Word PROCEDURE **/
|
||||
--SRT PROCEDURE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word PROFILE **/
|
||||
PROFILE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word PROGRAM **/
|
||||
@ -1520,7 +1504,7 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
/** Unreserved Keyword Word REFERENCES **/
|
||||
REFERENCES VARCHAR2(240);
|
||||
/** Unreserved Keyword Word REFERENCING **/
|
||||
--REFERENCING VARCHAR2(240);
|
||||
REFERENCING VARCHAR2(240);
|
||||
/** Unreserved Keyword Word REFRESH **/
|
||||
REFRESH VARCHAR2(240);
|
||||
/** Unreserved Keyword Word REGEXP_LIKE **/
|
||||
@ -1737,8 +1721,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
SPLIT VARCHAR2(240);
|
||||
/** Unreserved Keyword Word SPREADSHEET **/
|
||||
SPREADSHEET VARCHAR2(240);
|
||||
/** Unreserved Keyword Word SQL **/
|
||||
SQL VARCHAR2(240);
|
||||
/** Unreserved Keyword Word SQL_TRACE **/
|
||||
SQL_TRACE VARCHAR2(240);
|
||||
/** Unreserved Keyword Word SQLLDR **/
|
||||
@ -2037,8 +2019,6 @@ CREATE OR REPLACE PACKAGE pkg_fields AS
|
||||
WALLET VARCHAR2(240);
|
||||
/** Unreserved Keyword Word WELLFORMED **/
|
||||
WELLFORMED VARCHAR2(240);
|
||||
/** Unreserved Keyword Word WHEN **/
|
||||
--SRT WHEN VARCHAR2(240);
|
||||
/** Unreserved Keyword Word WHENEVER **/
|
||||
WHENEVER VARCHAR2(240);
|
||||
/** Unreserved Keyword Word WHITESPACE **/
|
||||
|
Reference in New Issue
Block a user