From f871f595d6a3be7064e30c3f513d19e398d9bc73 Mon Sep 17 00:00:00 2001 From: XudongXie Date: Sun, 15 Sep 2024 23:10:55 +0800 Subject: [PATCH] add Exception document --- sqlTranslate/.idea/workspace.xml | 28 +++++++++---------- .../main/java/Document/Exception in Oracle | 20 +++++++++++++ sqlTranslate/src/main/java/Document/Todolist | 14 +++++----- .../src/main/java/Lexer/OracleLexer.java | 2 +- sqlTranslate/src/main/java/Main.java | 1 + .../src/main/java/Parser/OracleParser.java | 2 +- 6 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 sqlTranslate/src/main/java/Document/Exception in Oracle diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml index 927c33fbd..c13465a49 100644 --- a/sqlTranslate/.idea/workspace.xml +++ b/sqlTranslate/.idea/workspace.xml @@ -4,12 +4,12 @@ - @@ -491,7 +490,8 @@ - diff --git a/sqlTranslate/src/main/java/Document/Exception in Oracle b/sqlTranslate/src/main/java/Document/Exception in Oracle new file mode 100644 index 000000000..b608c4fd7 --- /dev/null +++ b/sqlTranslate/src/main/java/Document/Exception in Oracle @@ -0,0 +1,20 @@ +EXCEPTION + -- custom exception + WHEN e_custom_exception THEN + DBMS_OUTPUT.PUT_LINE('Caught an exception: Custom exception raised'); + -- divide by zero + WHEN ZERO_DIVIDE THEN + DBMS_OUTPUT.PUT_LINE('Caught an exception: Division by zero'); + -- invalid text representations + WHEN INVALID_NUMBER THEN + DBMS_OUTPUT.PUT_LINE('Caught an exception: Invalid number'); + -- other exceptions + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Caught an exception: ' || SQLERRM); + +Example: + EXCEPTION + WHEN ZERO_DIVIDE THEN + DBMS_OUTPUT.PUT_LINE('Caught an exception: Division by zero'); + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Caught an exception: ' || SQLERRM); \ No newline at end of file diff --git a/sqlTranslate/src/main/java/Document/Todolist b/sqlTranslate/src/main/java/Document/Todolist index fed81ff29..13fdb9339 100644 --- a/sqlTranslate/src/main/java/Document/Todolist +++ b/sqlTranslate/src/main/java/Document/Todolist @@ -12,16 +12,16 @@ Operation  loop... end loop 1  while... loop... end loop 1  for ... in () loop end loop 1 - continue、exit - return - exception - commit、rollback、execute + continue、exit 1 + return **** + exception ** + commit、rollback、execute ****  alter table 1  create table 1  drop table 1 Object  table 1  view 1 - function - procedure - trigger \ No newline at end of file + function *** + procedure *** + trigger ***** \ No newline at end of file diff --git a/sqlTranslate/src/main/java/Lexer/OracleLexer.java b/sqlTranslate/src/main/java/Lexer/OracleLexer.java index fd5c8526b..96e3a49d0 100644 --- a/sqlTranslate/src/main/java/Lexer/OracleLexer.java +++ b/sqlTranslate/src/main/java/Lexer/OracleLexer.java @@ -32,7 +32,7 @@ public class OracleLexer { // PL/SQL , ":=", "IF", "ELSIF", "BEGIN", ".." // Loop - , "LOOP", "EXIT", "WHILE", "FOR", "IN" + , "LOOP", "EXIT", "WHILE", "FOR", "IN", "CONTINUE" }; private static final Pattern TOKEN_PATTERN = Pattern.compile( "(NUMBER\\(.*?\\))|" + // NUMBER() function diff --git a/sqlTranslate/src/main/java/Main.java b/sqlTranslate/src/main/java/Main.java index 35a3658c4..7fc0ed165 100644 --- a/sqlTranslate/src/main/java/Main.java +++ b/sqlTranslate/src/main/java/Main.java @@ -47,6 +47,7 @@ public class Main { // " END IF;"; String sql = "LOOP\n" + " DBMS_OUTPUT.PUT_LINE(v_counter);\n" + + " Continue;\n" + " v_counter := v_counter + 1;\n" + " EXIT WHEN v_counter > 10;\n" + " END LOOP;"; diff --git a/sqlTranslate/src/main/java/Parser/OracleParser.java b/sqlTranslate/src/main/java/Parser/OracleParser.java index 2f893ac34..7844d9208 100644 --- a/sqlTranslate/src/main/java/Parser/OracleParser.java +++ b/sqlTranslate/src/main/java/Parser/OracleParser.java @@ -797,7 +797,7 @@ public class OracleParser { currentNode.addChild(childNode); currentNode = childNode; } - // match EXIT WHEN condition; + // match EXIT condition; else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("EXIT")) { ASTNode childNode = new LoopExitNode(); for (int j = i; j < parseTokens.size(); j++) {