Why Oracle Shows Your Tables in UPPERCASE: Case Folding Explained
Oracle folds unquoted names to upper case, PostgreSQL to lower case, MySQL depends on a setting, SQL Server on collation. The rules, and how to stay out of trouble.
Run your migrations on a real Oracle 21, 23 in Docker and get the resulting schema as an SVG. 11 migration tools can draw on Oracle.
Pass the version as the version field with databaseType=ORACLE. Each one is a stock image, started fresh for every drawing.
| Version | Image |
|---|---|
21 | gvenzl/oracle-xe:21-slim-faststart |
23 | gvenzl/oracle-free:23-slim-faststart |
Oracle folds unquoted identifiers to upper case, so a table written as owners is drawn as OWNERS. Version 21 is Oracle XE, version 23 is Oracle Free.
The types are the names the engine's JDBC metadata reports, without lengths: an integer column reads NUMBER, a short text VARCHAR2, a calendar date DATE. Tables are read from the migration user's schema; the migration tool's own bookkeeping table is left out.
Most of these ship no Oracle driver.
The PetClinic sample, drawn from Flyway migrations on Oracle Database 23. Open the SVG.
The same request works for every tool; only migrationType and the files change.
curl -X POST https://schemadrawer.com/api/v1/drawing \
-H "Request-Id: $(uuidgen)" \
-F "userId=5f0c1d2e-3a4b-4c5d-8e6f-7a8b9c0d1e2f" \
-F "migrationType=FLYWAY" \
-F "databaseType=ORACLE" \
-F "version=23" \
-F "files=@db/migration/V1__create_owners_and_pets.sql" \
-F "files=@db/migration/V2__create_vets.sql" \
-F "files=@db/migration/V3__create_visits.sql"
# {"jobId":"0b6e2f4c-8d1a-4c3e-9f7a-2a5b6c7d8e9f"}
- uses: schemadrawercom/action@v1
with:
sql-directory: db/migration
output-path: docs/schema-diagram.svg
migration-type: FLYWAY
database-type: ORACLE
database-version: '23'
github-token: ${{ secrets.GITHUB_TOKEN }}
Oracle folds unquoted names to upper case, PostgreSQL to lower case, MySQL depends on a setting, SQL Server on collation. The rules, and how to stay out of trouble.
A practical guide to column types in PostgreSQL, MySQL, SQL Server, Oracle and SQLite: strings, timestamps, money, booleans, JSON, enums and what diagrams report.
Which engines run DDL in transactions (PostgreSQL, SQL Server, SQLite), which commit implicitly (MySQL, MariaDB, Oracle), and how to write migrations for both.
Upload the migration directory, pick the version you deploy to, get an SVG back.