pentaho/pentaho-kettle · error · KettleException

OraBulkLoaderMeta.Exception.TableNotFound

Error message

OraBulkLoaderMeta.Exception.TableNotFound

What it means

Thrown by OraBulkLoaderMeta.getTableFields() when validating the target table: the step opens a database connection, checks whether the (schema-qualified) table exists via db.checkTableExists(), and throws this KettleException if it does not. The message text comes from the messages bundle key OraBulkLoaderMeta.Exception.TableNotFound.

Solutions

  1. Verify the table exists with the exact name/schema in the target Oracle database (SELECT * FROM all_tables WHERE table_name = ...)
  2. Correct the schema name and table name in the OraBulkLoader dialog, remembering Oracle's default uppercase identifier convention
  3. Confirm the database connection points to the intended host/service and that the user can see the table
  4. Create the table first or grant SELECT privileges on it to the connection user

Example fix

// before
realTableName = "ORDERS_NEW"; // table not created yet
// after: create it, or point to the existing table
realTableName = "ORDERS";
Defensive patterns

Strategy: validation

Validate before calling

// Verify table existence before running the transformation:
Database db = new Database( loggingObject, databaseMeta );
db.connect();
String qualified = databaseMeta.getQuotedSchemaTableCombination( schema, table );
if ( !db.checkTableExists( qualified ) ) {
  throw new IllegalStateException( "Target table missing: " + qualified );
}
db.disconnect();

Try / catch

try { fields = meta.getTableFields(); } catch ( KettleException e ) { log.error( "Table lookup failed, check schema/table: " + e.getMessage(), e ); }

Prevention

When it happens

Trigger: Calling getTableFields (used when the 'Get fields' button resolves target columns) with a tableName that, qualified with realSchemaName, does not exist in the database referenced by databaseMeta.

Common situations: Typo in the target table name or schema name; the table was never created; connecting to the wrong database/schema/environment; insufficient privileges so checkTableExists returns false; case-sensitivity issues with Oracle uppercase identifiers.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/45b6ca6274a05b3b. Report an issue: GitHub.

Appendix: source

Thrown at plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoaderMeta.java:876

  }

  public RowMetaInterface getRequiredFields( VariableSpace space ) throws KettleException {
    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

View on GitHub (pinned to f3058517a1)