diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index 73ffaab411..5eec8d76ad 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -2812,17 +2812,10 @@ public boolean visit(SQLExprTableSource x) { String alias = x.getAlias(); List columns = x.getColumnsDirect(); if (alias != null) { - SQLObject parent = x.getParent(); - if (parent instanceof SQLCreateIndexStatement - || parent instanceof SQLMergeStatement - || parent instanceof SQLDeleteStatement) { - print(' '); - print0(alias); - } else { - print(' '); - print0(ucase ? " AS " : " as "); - print0(alias); - } + // In Oracle, table aliases should not use AS keyword + // AS keyword is only used for column aliases + print(' '); + print0(alias); } if (columns != null && columns.size() > 0) { diff --git a/core/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleFormatTest.java b/core/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleFormatTest.java index 244ef283c7..384293a73f 100644 --- a/core/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleFormatTest.java +++ b/core/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleFormatTest.java @@ -15,6 +15,7 @@ */ package com.alibaba.druid.bvt.sql.oracle; +import com.alibaba.druid.DbType; import com.alibaba.druid.sql.SQLUtils; import junit.framework.TestCase; @@ -23,4 +24,38 @@ public void test_formatOracle() { String sql = SQLUtils.formatOracle("select substr('123''''a''''bc',0,3) FROM dual"); System.out.println(sql); } + + public void test_format_tableAlias_without_as() { + String sql = "select * from AB01 a where a.AAB999 = '430521463000'"; + String formattedSql = SQLUtils.format(sql, DbType.oracle); + + assertFalse("Table alias should not use AS keyword in Oracle", formattedSql.contains(" AS a")); + assertTrue("Table alias should be present", formattedSql.contains("AB01 a")); + + System.out.println("Original SQL: " + sql); + System.out.println("Formatted SQL: " + formattedSql); + + String sql2 = "SELECT t1.id, t2.name FROM users t1 JOIN orders t2 ON t1.id = t2.user_id"; + String formatted2 = SQLUtils.format(sql2, DbType.oracle); + assertFalse("Table alias should not use AS keyword", formatted2.contains(" AS t1") || formatted2.contains(" AS t2")); + + String sql3 = "SELECT * FROM table1 t1, table2 t2 WHERE t1.id = t2.ref_id"; + String formatted3 = SQLUtils.format(sql3, DbType.oracle); + assertFalse("Multiple table aliases should not use AS keyword", + formatted3.contains(" AS t1") || formatted3.contains(" AS t2")); + + System.out.println("Test sql2: " + formatted2); + System.out.println("Test sql3: " + formatted3); + } + + public void test_format_columnAlias_with_as() { + String sql = "SELECT name AS full_name, age FROM users u"; + String formattedSql = SQLUtils.format(sql, DbType.oracle); + + assertTrue("Column alias should use AS keyword", formattedSql.contains(" AS ")); + + assertFalse("Table alias should not use AS keyword", formattedSql.contains("users AS u")); + + System.out.println("Column alias test: " + formattedSql); + } }