in seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-oracle/src/main/java/org/apache/seatunnel/datasource/plugin/oracle/jdbc/OracleDataSourceChannel.java [59:134]
public List<String> getTables(
@NonNull String pluginName,
Map<String, String> requestParams,
String database,
Map<String, String> options) {
StringBuilder sqlWhere = new StringBuilder();
final String sql =
"SELECT * FROM ( SELECT OWNER, TABLE_NAME FROM ALL_TABLES\n"
+ "WHERE TABLE_NAME NOT LIKE 'MDRT_%'\n"
+ " AND TABLE_NAME NOT LIKE 'MDRS_%'\n"
+ " AND TABLE_NAME NOT LIKE 'MDXT_%'\n"
+ " AND (TABLE_NAME NOT LIKE 'SYS_IOT_OVER_%' AND IOT_NAME IS NULL)"
+ "AND OWNER NOT IN ('APPQOSSYS', 'AUDSYS', 'CTXSYS', 'DVSYS', 'DBSFWUSER', 'DBSNMP',\n"
+ " 'GSMADMIN_INTERNAL', 'LBACSYS', 'MDSYS', 'OJVMSYS', 'OLAPSYS',\n"
+ " 'ORDDATA', 'ORDSYS', 'OUTLN', 'SYS', 'SYSTEM', 'WMSYS',\n"
+ " 'XDB', 'EXFSYS', 'SYSMAN')";
sqlWhere.append(sql);
String filterName = options.get("filterName");
if (StringUtils.isNotEmpty(filterName)) {
String[] split = filterName.split("\\.");
if (split.length == 2) {
sqlWhere.append(" AND (TABLE_NAME LIKE '")
.append(
split[1].contains("%")
? split[1].toUpperCase(Locale.ROOT)
: "%" + split[1].toUpperCase(Locale.ROOT) + "%")
.append("'")
.append(" AND OWNER LIKE '")
.append(
split[0].contains("%")
? split[0].toUpperCase(Locale.ROOT)
: "%" + split[0].toUpperCase(Locale.ROOT) + "%")
.append("')");
} else {
String filterNameRep =
filterName.contains("%")
? filterName.toUpperCase(Locale.ROOT)
: "%" + filterName.toUpperCase(Locale.ROOT) + "%";
sqlWhere.append(" AND (TABLE_NAME LIKE '%")
.append(filterNameRep)
.append("%'")
.append(" OR OWNER LIKE '%")
.append(filterNameRep)
.append("%')");
}
}
sqlWhere.append(" ORDER BY OWNER, TABLE_NAME ) ");
String size = options.get("size");
if (StringUtils.isNotEmpty(size)) {
sqlWhere.append("WHERE ROWNUM <= ").append(size);
}
log.info("execute sql :{}", sqlWhere.toString());
List<String> tableNames = new ArrayList<>();
long start = System.currentTimeMillis();
try (Connection connection = getConnection(requestParams); ) {
long end = System.currentTimeMillis();
log.info("connection, cost {}ms for oracle", end - start);
start = System.currentTimeMillis();
try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sqlWhere.toString())) {
end = System.currentTimeMillis();
log.info("statement execute sql, cost {}ms for oracle", end - start);
start = System.currentTimeMillis();
while (resultSet.next()) {
String schemaName = resultSet.getString("OWNER");
String tableName = resultSet.getString("TABLE_NAME");
tableNames.add(schemaName + "." + tableName);
}
end = System.currentTimeMillis();
log.info("while result set, cost {}ms for oracle", end - start);
}
return tableNames;
} catch (ClassNotFoundException | SQLException e) {
throw new DataSourcePluginException("get table names failed", e);
}
}