Every table in Oracle Fusion HCM follows a naming convention, and the suffix at the end tells you exactly what the table does: whether it holds translations, current values only, or a full date-tracked history. Get the suffix wrong in a query, and you don't get an error; you get silently wrong data: duplicate rows, missing history, or results in the wrong language. This piece explains each suffix with real table examples and the specific reporting bug each one causes when it's misunderstood. DataTerrain's Oracle HCM Analytics team builds these conventions correctly into every reporting engagement.
Oracle Fusion HCM Cloud has roughly 15,000 tables, and each one has a suffix that tells you what kind of data it holds and how it should be queried. Getting the suffix wrong doesn't throw an error; it just returns incorrect data that looks plausible until someone checks the numbers.
| Suffix | Meaning | Example Table | What Goes Wrong If You Ignore It |
|---|---|---|---|
| _ALL | Multi-org data, no security filter applied | PAY_ELEMENT_TYPES_ALL | Cross-org data leaks into single-org reports |
| _B | Base table, structural attributes only | PER_JOBS_B | IDs with no readable name or label |
| _TL | Translation table, one row per language | PER_JOBS_TL | One row per installed language returned per record |
| _VL | View joining a _B table with its _TL table | PER_JOBS_VL | None if used correctly; manual joins risk the _TL row-multiplication bug |
| _F | Date-tracked history (EFFECTIVE_START_DATE / EFFECTIVE_END_DATE) | PER_ALL_PEOPLE_F | Every historical version returned instead of the current one |
| _X | View showing only the currently effective row of a _F table | PER_PEOPLE_X | Manually filtering _F tables by SYSDATE is error-prone; _X does it for you |
| _V | Generic view over a base table | Varies by module | Query inefficiency if the underlying base table is queried directly instead |
| _S | Sequence-generated primary key values | Varies by module | Not typically queried directly; relevant mainly for custom extensions |
| _A, _AVN, _ACN | Audit tables tracking changes over time | Varies by module | Missed audit trail for compliance and change tracking |
| _KFV | View containing Key Flexfield (KFF) segment values | Varies by module | KFF values queried by raw attribute column instead of by name |
| _DFV | View containing Descriptive Flexfield (DFF) segment values | Varies by module | Same issue as _KFV, but for DFF attributes |
| _EFC | Euro Financial Currency configuration tables | Varies by module | Relevant mainly in EU-currency financial configurations |
The suffixes aren't just naming trivia; they directly determine whether a query is correct. Three patterns come up constantly, and getting any of them wrong is exactly the kind of issue DataTerrain's Reports Conversion team catches when migrating legacy HCM reports onto Fusion.
The _TL row-multiplication bug. PER_JOBS_TL holds one row per business object per installed language. Query it without filtering LANGUAGE = 'US' (or your session's language code), and every job title comes back once per installed language, silently multiplying your row count. This is one of the most common Oracle HCM reporting bugs, and it rarely throws an obvious error; the report just quietly has more rows than expected.
The _F missing-date-filter bug. PER_ALL_PEOPLE_F stores every version of an employee's record across their entire history, each bounded by EFFECTIVE_START_DATE and EFFECTIVE_END_DATE. A query with no date predicate returns every historical version rather than the one true record as of today, which is why almost every query against a _F table needs a date filter, or should use the corresponding _X view where one exists.
The _B-without-_TL bug. PER_JOBS_B holds the job's ID and structural attributes, but the readable job title lives in PER_JOBS_TL. Querying _B alone gets you IDs with no labels attached; a _VL view (like PER_JOBS_VL) usually already does this join correctly and should be used instead of hand-joining the two tables.
Getting table suffixes wrong is a common source of broken reports during Oracle HCM migrations and custom reporting builds. DataTerrain's Oracle HCM Analytics practice builds reporting and data models against these conventions correctly from the start, applying the right date filters on _F tables, the right language filters on _TL tables, and using _VL/_X views wherever they already exist instead of reinventing the join. If you're migrating legacy HCM reports onto Oracle Fusion, our Reports Conversion services carry this same suffix-level discipline through the conversion so migrated reports don't silently break on row-multiplication or stale-date bugs. This same table-level rigor underpins our Oracle Fast Formulas work, since formulas frequently read from these same _F and _TL tables.
Oracle Fast Formulas in Fusion HCM | Oracle HCM Analytics | Reports Conversion