{"record":{"id":"f5134227fb9f4bc8","repo":"pentaho/pentaho-kettle","slug":"orabulkloadermeta-exception-tablenotspecified","errorCode":null,"errorMessage":"OraBulkLoaderMeta.Exception.TableNotSpecified","messagePattern":"OraBulkLoaderMeta\\.Exception\\.TableNotSpecified","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoaderMeta.java","lineNumber":879,"sourceCode":"    String realTableName = space.environmentSubstitute( tableName );\n    String realSchemaName = space.environmentSubstitute( schemaName );\n\n    if ( databaseMeta != null ) {\n      Database db = new Database( loggingObject, databaseMeta );\n      try {\n        db.connect();\n\n        if ( !Utils.isEmpty( realTableName ) ) {\n          String schemaTable = databaseMeta.getQuotedSchemaTableCombination( realSchemaName, realTableName );\n\n          // Check if this table exists...\n          if ( db.checkTableExists( schemaTable ) ) {\n            return db.getTableFields( schemaTable );\n          } else {\n            throw new KettleException( BaseMessages.getString( PKG, \"OraBulkLoaderMeta.Exception.TableNotFound\" ) );\n          }\n        } else {\n          throw new KettleException( BaseMessages.getString( PKG, \"OraBulkLoaderMeta.Exception.TableNotSpecified\" ) );\n        }\n      } catch ( Exception e ) {\n        throw new KettleException(\n          BaseMessages.getString( PKG, \"OraBulkLoaderMeta.Exception.ErrorGettingFields\" ), e );\n      } finally {\n        db.close();\n      }\n    } else {\n      throw new KettleException( BaseMessages.getString( PKG, \"OraBulkLoaderMeta.Exception.ConnectionNotDefined\" ) );\n    }\n\n  }\n\n  /**\n   * @return the schemaName\n   */\n  public String getSchemaName() {\n    return schemaName;","sourceCodeStart":861,"sourceCodeEnd":897,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoaderMeta.java#L861-L897","documentation":"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.","triggerScenarios":"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.","commonSituations":"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'.","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"],"exampleFix":"// before\nmeta.setTableName( \"${TARGET_TABLE}\" ); // variable unset -> empty\n// after: define TARGET_TABLE in kettle.properties or set a literal\nmeta.setTableName( \"SALES_FACTS\" );","handlingStrategy":"validation","validationCode":"// Check the meta is fully configured before calling getTableFields:\nif ( meta.getTableName() == null || meta.getTableName().trim().isEmpty() ) {\n  throw new IllegalStateException( \"OraBulkLoader target table not set\" );\n}","typeGuard":null,"tryCatchPattern":"try { fields = meta.getTableFields(); } catch ( KettleException e ) { throw new IllegalStateException( \"Configure target table before field lookup\", e ); }","preventionTips":["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"],"tags":["kettle","pdi","oracle","missing-config","target-table"],"backgroundTag":"missing-required-config-field","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}