mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
bug: oracle解析Record输出不正确
This commit is contained in:
+6
-5
@@ -1907,6 +1907,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
|| lexer.token() == Token.TABLE) {
|
||||
break;
|
||||
} else if (lexer.identifierEquals(FnvHash.Constants.TYPE)) {
|
||||
|
||||
lexer.nextToken();
|
||||
name = this.exprParser.name();
|
||||
accept(Token.IS);
|
||||
@@ -1921,7 +1922,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
lexer.nextToken();
|
||||
accept(Token.OF);
|
||||
|
||||
name = this.exprParser.name();
|
||||
SQLName tname = this.exprParser.name();
|
||||
|
||||
if (lexer.token() == Token.PERCENT) {
|
||||
lexer.nextToken();
|
||||
@@ -1929,15 +1930,15 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
String typeName;
|
||||
if (lexer.identifierEquals(FnvHash.Constants.ROWTYPE)) {
|
||||
lexer.nextToken();
|
||||
typeName = "TABLE OF " + name.toString() + "%ROWTYPE";
|
||||
typeName = "TABLE OF " + tname.toString() + "%ROWTYPE";
|
||||
} else if (lexer.token() == Token.LPAREN && lexer.stringVal().equalsIgnoreCase("Varchar2")) {
|
||||
accept(Token.LPAREN);
|
||||
int len = this.exprParser.acceptInteger();
|
||||
accept(Token.RPAREN);
|
||||
typeName = "TABLE OF " + name.toString() + "(" + len + ")";
|
||||
typeName = "TABLE OF " + tname.toString() + "(" + len + ")";
|
||||
} else {
|
||||
acceptIdentifier("TYPE");
|
||||
typeName = "TABLE OF " + name.toString() + "%TYPE";
|
||||
typeName = "TABLE OF " + tname.toString() + "%TYPE";
|
||||
}
|
||||
|
||||
dataType = new SQLDataTypeImpl(typeName);
|
||||
@@ -1957,7 +1958,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
((SQLDataTypeImpl) dataType).setIndexBy(indexBy);
|
||||
}
|
||||
}else if (lexer.token() == Token.SEMI) {
|
||||
dataType = new SQLDataTypeImpl("TABLE OF " + name.toString());
|
||||
dataType = new SQLDataTypeImpl("TABLE OF " + tname.toString());
|
||||
}
|
||||
dataType.setDbType(dbType);
|
||||
} else if (lexer.identifierEquals("VARRAY")) {
|
||||
|
||||
@@ -6827,7 +6827,8 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
|
||||
String dataTypeName = dataType.getName();
|
||||
boolean printType = (dataTypeName.startsWith("TABLE OF") && x.getDefaultValue() == null)
|
||||
|| dataTypeName.equalsIgnoreCase("REF CURSOR")
|
||||
|| dataTypeName.startsWith("VARRAY(");
|
||||
|| dataTypeName.startsWith("VARRAY(")
|
||||
|| dataTypeName.startsWith("RECORD");
|
||||
if (printType) {
|
||||
print0(ucase ? "TYPE " : "type ");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user