pentaho/pentaho-kettle · error · KettleException
OraBulkLoaderMeta.Exception.TableNotSpecified
Error message
OraBulkLoaderMeta.Exception.TableNotSpecified
What it means
Thrown by OraBulkLoaderMeta.getTableFields() when no target table name is configured. Before touching the database the method requires a non-empty tableName; if it is empty it fails with the TableNotSpecified message from the messages bundle instead of querying.
Solutions
- Open the OraBulkLoader step and set the target table name
- If a variable is used, make sure it is defined (transformation/kettle.properties) and non-empty
- In code, call meta.setTableName("MY_TABLE") before invoking getTableFields
Example fix
// before
meta.setTableName( "${TARGET_TABLE}" ); // variable unset -> empty
// after: define TARGET_TABLE in kettle.properties or set a literal
meta.setTableName( "SALES_FACTS" ); Defensive patterns
Strategy: validation
Validate before calling
// Check the meta is fully configured before calling getTableFields:
if ( meta.getTableName() == null || meta.getTableName().trim().isEmpty() ) {
throw new IllegalStateException( "OraBulkLoader target table not set" );
} Try / catch
try { fields = meta.getTableFields(); } catch ( KettleException e ) { throw new IllegalStateException( "Configure target table before field lookup", e ); } Prevention
- Always fill the Target table field before clicking 'Get fields'
- Ensure variables used in table names are defined (kettle.properties)
- Validate meta completeness programmatically before executing transformations built via API
When it happens
Trigger: Invoking getTableFields (or the dialog's field-lookup) while the 'Target table' property of the OraBulkLoader step is blank or resolves to an empty string after variable substitution.
Common situations: A transformation was copied and the target table field lost its value; a variable like ${TABLE_NAME} was left unset so it resolves to empty; a programmatically constructed OraBulkLoaderMeta forgot setTableName(); new step added to canvas and configured only partially before clicking 'Get fields'.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- OraBulkLoaderMeta.Exception.ConnectionNotDefined
- No connection specified
- No control file specified
- No sqlldr application specified
- OraBulkLoaderMeta.Exception.ErrorGettingFields
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f5134227fb9f4bc8.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoaderMeta.java:879
String realTableName = space.environmentSubstitute( tableName );
String realSchemaName = space.environmentSubstitute( schemaName );
if ( databaseMeta != null ) {
Database db = new Database( loggingObject, databaseMeta );
try {
db.connect();
if ( !Utils.isEmpty( realTableName ) ) {
String schemaTable = databaseMeta.getQuotedSchemaTableCombination( realSchemaName, realTableName );
// Check if this table exists...
if ( db.checkTableExists( schemaTable ) ) {
return db.getTableFields( schemaTable );
} else {
throw new KettleException( BaseMessages.getString( PKG, "OraBulkLoaderMeta.Exception.TableNotFound" ) );
}
} else {
throw new KettleException( BaseMessages.getString( PKG, "OraBulkLoaderMeta.Exception.TableNotSpecified" ) );
}
} catch ( Exception e ) {
throw new KettleException(
BaseMessages.getString( PKG, "OraBulkLoaderMeta.Exception.ErrorGettingFields" ), e );
} finally {
db.close();
}
} else {
throw new KettleException( BaseMessages.getString( PKG, "OraBulkLoaderMeta.Exception.ConnectionNotDefined" ) );
}
}
/**
* @return the schemaName
*/
public String getSchemaName() {
return schemaName;View on GitHub (pinned to f3058517a1)