diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml
index 1cc00376c..d2dacd75d 100644
--- a/sqlTranslate/.idea/workspace.xml
+++ b/sqlTranslate/.idea/workspace.xml
@@ -4,10 +4,17 @@
-
-
+
+
+
+
+
+
+
+
-
+
+
@@ -105,13 +112,6 @@
1723106789329
-
- 1725981063195
-
-
-
- 1725981063195
-
1725981511612
@@ -448,7 +448,14 @@
1726474768114
-
+
+ 1726491998608
+
+
+
+ 1726491998609
+
+
@@ -463,7 +470,6 @@
-
@@ -488,7 +494,8 @@
-
+
+
diff --git a/sqlTranslate/src/main/java/Document/Procedure in Oracle b/sqlTranslate/src/main/java/Document/Procedure in Oracle
index 8f6f1919e..4495b34c1 100644
--- a/sqlTranslate/src/main/java/Document/Procedure in Oracle
+++ b/sqlTranslate/src/main/java/Document/Procedure in Oracle
@@ -4,7 +4,7 @@ BEGIN
-- PL/SQL statements
[EXCEPTION]
-- Exception handling
-END [procedure_name];
+END [procedure_name]; -- [procedure_name] should be removed in OpenGauss
Example: CREATE OR REPLACE PROCEDURE update_salary(
employee_id IN NUMBER,
diff --git a/sqlTranslate/src/main/java/Parser/AST/CreateTable/ColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/CreateTable/ColumnNode.java
index c470ffff3..bd6a1e346 100644
--- a/sqlTranslate/src/main/java/Parser/AST/CreateTable/ColumnNode.java
+++ b/sqlTranslate/src/main/java/Parser/AST/CreateTable/ColumnNode.java
@@ -23,6 +23,7 @@ public class ColumnNode extends ASTNode implements ColumnType {
super(tokens);
}
+ @Override
public void visit(ASTNode node, StringBuilder queryString)
{
if (node.hasChild() && !(node.getChildren().get(0) instanceof CRTEndNode) )
diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureBeginNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureBeginNode.java
new file mode 100644
index 000000000..481e97122
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureBeginNode.java
@@ -0,0 +1,31 @@
+package Parser.AST.Procedure;
+
+import Lexer.Token;
+import Parser.AST.ASTNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProcedureBeginNode extends ASTNode {
+ public ProcedureBeginNode() {
+ super();
+ setTokens(new ArrayList<>());
+ }
+
+ public ProcedureBeginNode(ASTNode node) {
+ super(node);
+ }
+
+ public ProcedureBeginNode(List tokens) {
+ super(tokens);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString) {
+ queryString.append(toString() + " ");
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+}
diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureColumnNode.java
new file mode 100644
index 000000000..f495fbff9
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureColumnNode.java
@@ -0,0 +1,95 @@
+package Parser.AST.Procedure;
+
+import Interface.ColumnType;
+import Lexer.Token;
+import Parser.AST.ASTNode;
+import Parser.AST.CreateTable.CRTEndNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProcedureColumnNode extends ASTNode implements ColumnType {
+ private Token name;
+ private Token type;
+ private List constraint;
+ private List InOut;
+ public ProcedureColumnNode() {
+ super();
+ setTokens(new ArrayList<>());
+ }
+
+ public ProcedureColumnNode(ASTNode node)
+ {
+ super(node);
+ }
+
+ public ProcedureColumnNode(List tokens)
+ {
+ super(tokens);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString)
+ {
+ if (node.hasChild() && !(node.getChildren().get(0) instanceof ProcedureColumnNode) )
+ queryString.append(toString() + ", ");
+ else if (node.hasChild() && (node.getChildren().get(0) instanceof ProcedureColumnNode))
+ queryString.append(toString() + " ");
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+
+ public Token getName() {
+ return name;
+ }
+
+ public void setName(Token name) {
+ this.name = name;
+ }
+
+ @Override
+ public Token getType() {
+ return type;
+ }
+
+ @Override
+ public void setType(Token type) {
+ this.type = type;
+ }
+
+ public List getConstraint() {
+ return constraint;
+ }
+
+ public void setConstraint(List constraint) {
+ this.constraint = constraint;
+ }
+
+ public List getInOut() {
+ return InOut;
+ }
+
+ public void setInOut(List InOut) {
+ this.InOut = InOut;
+ }
+
+ public void addInOut(Token InOut) {
+ this.InOut.add(InOut);
+ }
+
+ @Override
+ public void ResetTokensbyNameTypeConstraint() {
+ List tokens = new ArrayList<>();
+ tokens.add(name);
+ for (Token token : InOut) {
+ tokens.add(token);
+ }
+ tokens.add(type);
+ for (Token token : constraint) {
+ tokens.add(token);
+ }
+ setTokens(tokens);
+ }
+}
diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureEndNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureEndNode.java
new file mode 100644
index 000000000..7ebd9d934
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureEndNode.java
@@ -0,0 +1,31 @@
+package Parser.AST.Procedure;
+
+import Lexer.Token;
+import Parser.AST.ASTNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProcedureEndNode extends ASTNode {
+ public ProcedureEndNode() {
+ super();
+ setTokens(new ArrayList<>());
+ }
+
+ public ProcedureEndNode(ASTNode node) {
+ super(node);
+ }
+
+ public ProcedureEndNode(List tokens) {
+ super(tokens);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString) {
+ queryString.append(toString());
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+}
diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureNode.java
new file mode 100644
index 000000000..9fc3afe08
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureNode.java
@@ -0,0 +1,31 @@
+package Parser.AST.Procedure;
+
+import Lexer.Token;
+import Parser.AST.ASTNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProcedureNode extends ASTNode {
+ public ProcedureNode() {
+ super();
+ setTokens(new ArrayList<>());
+ }
+
+ public ProcedureNode(ASTNode node) {
+ super(node);
+ }
+
+ public ProcedureNode(List tokens) {
+ super(tokens);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString) {
+ queryString.append(toString() + " ");
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+}
diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureObjNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureObjNode.java
new file mode 100644
index 000000000..eca2e3f48
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureObjNode.java
@@ -0,0 +1,32 @@
+package Parser.AST.Procedure;
+
+import Lexer.Token;
+import Parser.AST.ASTNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProcedureObjNode extends ASTNode {
+ public ProcedureObjNode() {
+ super();
+ setTokens(new ArrayList<>());
+ }
+
+ public ProcedureObjNode(ASTNode node) {
+ super(node);
+ }
+
+ public ProcedureObjNode(List tokens) {
+ super(tokens);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString) {
+ queryString.append(toString() + " (");
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+
+}
diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedurePLStatementNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedurePLStatementNode.java
new file mode 100644
index 000000000..bee1052fb
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedurePLStatementNode.java
@@ -0,0 +1,27 @@
+package Parser.AST.Procedure;
+
+import Lexer.Token;
+import Parser.AST.ASTNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProcedurePLStatementNode extends ASTNode {
+ public ProcedurePLStatementNode() {
+ super();
+ }
+ public ProcedurePLStatementNode(ASTNode node) {
+ super(node);
+ }
+ public ProcedurePLStatementNode(List tokens) {
+ super(tokens);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString) {
+ queryString.append(toString() + " ");
+ for (ASTNode child : node.getChildren()) {
+ child.visit(child, queryString);
+ }
+ }
+}
diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureRetDefNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureRetDefNode.java
new file mode 100644
index 000000000..402468059
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureRetDefNode.java
@@ -0,0 +1,30 @@
+package Parser.AST.Procedure;
+
+import Lexer.Token;
+import Parser.AST.ASTNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProcedureRetDefNode extends ASTNode {
+ public ProcedureRetDefNode() {
+ super();
+ }
+
+ public ProcedureRetDefNode(ASTNode node) {
+ super(node);
+ }
+
+ public ProcedureRetDefNode(List tokens) {
+ super(tokens);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString) {
+ queryString.append(") " + toString() + " ");
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+}