Oracle 10g and earlier cannot connect. Their O3LOGON handshake is not implemented, and there is no setting that works around it.
Connection settings
There is no Database field. Each user is a schema, and
Cmd+K or the Schema toolbar button switches the active one. Oracle’s own schemas, such as SYS, SYSTEM and XDB, sit at the end of the schema switcher, and the sidebar lists them only with Show system databases and schemas on, or when one is the schema in use. A tab binds to a schema rather than a database, so nothing reconnects when you switch.


Oracle connection form
Connection URL
Authentication
Username and password are the only credentials. Every verifier indba_users.password_versions works, 10G included; external, Kerberos, and LDAP-managed accounts do not connect at all. A 10G-only account still connects, on DES-based hashing Oracle has deprecated; rotate it with ALTER USER … IDENTIFIED BY and check that password_versions then holds 11G or 12C.
Common setups
A pluggable database has its own service name, and it is not the container’s:
XEPDB1 is a PDB inside XE, and connecting to the container name gets you the CDB with none of the application schemas. lsnrctl services lists both.
Oracle Cloud (ADB)
Copy host, port, and service name (of the formmydb_tp) from the TLS connection string in the Oracle Cloud Console, not the mTLS one, then set SSL mode to Required, or Verify CA with the CA certificate. Wallet files are never read, which also makes this the way out of a wallet that has stopped working.
The database has to accept TLS without mutual TLS: set Mutual TLS (mTLS) authentication to Not Required and give the database an access control list or a private endpoint. Oracle rejects the connection otherwise.
Editing and queries
Table info carries columns, types, nullability, primary keys, indexes, foreign keys, and CREATE TABLE DDL. The structure editor writesALTER TABLE with double-quoted identifiers for case-sensitive names: ADD, RENAME COLUMN, MODIFY, DROP, and CREATE INDEX.
The editor runs SQL and PL/SQL, and grid paging is written as OFFSET … ROWS FETCH NEXT … ROWS ONLY. Import and export work as they do elsewhere, and a remote server reaches through an SSH tunnel.
A partitioned table shows its partition count and lists the partitions under it, each with its position. ALL_TAB_PARTITIONS.HIGH_VALUE is a LONG column the driver cannot decode, so an Oracle partition row carries the position rather than the bound. Subpartitions nest under their partition. An interval-partitioned table reports no count: the server’s figure there is the range it will extend into, not the partitions that exist. Query one with SELECT * FROM orders PARTITION (p2024).
PL/SQL
A block or a stored unit is one statement, however many semicolons are inside it. Put the cursor anywhere in it and pressCmd+Enter, or click its run button in the gutter.
END is sent with it. A plain SQL statement is sent without its semicolon.
Scripts written for SQL*Plus or SQL Developer run unchanged: a line holding only / ends the statement above it and is never sent. Between units the slash is optional, except after CREATE JAVA SOURCE, CREATE MLE MODULE and a WRAPPED unit, which each run to the next / line or to the end of the script.
A CREATE whose unit does not compile fails with Oracle’s own errors, one per line with its position, instead of reporting success. The unit stays in the schema as INVALID until a version that compiles replaces it.
DBMS_OUTPUT.PUT_LINE lines show with the result of the statement that printed them. See Server output.
In a trigger body, :NEW and :OLD are left as written. In an anonymous block, :name is a query parameter filled from the panel.
An anonymous block, or a query whose WITH clause declares a function, runs code on the server. One that drops or truncates, including through EXECUTE IMMEDIATE '…', raises the dangerous query warning before it runs, and a Read-Only connection refuses it like any write. MCP clients and the AI assistant cannot send either.
Column type support
Anything else renders as
<unsupported: type>. Report those through GitHub Issues.
SSL/TLS
New connections default to Disabled, and there is no opportunistic upgrade: Preferred connects in plain TCP, which is why the SSL pane flags it in red. Required is TCPS; Verify CA adds a CA certificate path for strict validation. See SSL/TLS.On iPhone and iPad
The Oracle driver is compiled into TablePro Mobile, with no plugin to install. Browsing, queries, and row editing work; creating or altering tables and triggers stays on the Mac. See iPhone and iPad.Limitations
- No OS auth, wallets, Kerberos, or LDAP. Create a database user with a password and connect as that.
- BFILE columns show the locator, never the file. There is no path to the contents from the app.
- SQL*Plus commands such as
SET SERVEROUTPUT ON,SHOW ERRORSandEXECare not SQL and fail when sent. Delete them, and writeEXEC pasBEGIN p; END;. Output needs noSET SERVEROUTPUT ON. - No Users & Roles pane. Manage accounts with
CREATE USERandGRANTin the editor.
Troubleshooting
PROCEDURE … was created with compilation errors: the unit is stored but does not compile. Each line after the first gives the line and column in the unit’s source and thePLS- error there. Fix the source and run the CREATE OR REPLACE again.
Connection refused: check the listener is up with lsnrctl status, that port 1521 is open, and, on Docker, that the container is running (docker start oracle-xe).
Invalid service name: the listener does not answer for that name. List what it does answer for with lsnrctl services.
Unsupported Password Verifier: the account’s verifier is one the driver cannot use, usually a new one such as 23ai. Read password_versions for that user and file an issue with the verifier flag the dialog shows.
Server Version Not Supported: the server is 10g or earlier. Nothing on this side helps; the database has to be 11.1 or later.
Login Handshake Timed Out: TCP connected but the login never finished, so the attempt stops after 30 seconds. The dialog names the step the server stopped answering at. If that step is network encryption, set Network Encryption to Rejected and connect again. Otherwise confirm the host and port reach the listener, and look for a firewall, VPN, or proxy that stalls traffic once the TCP handshake is done.
Connection Dropped During Handshake: the server closed the connection mid-login, and the dialog names the phase it stopped at (advancedNegotiation, dataTypeNegotiation, authentication). Look for a firewall, VPN, or proxy that resets traffic, and confirm the host and port reach the listener itself.
Native Network Encryption Not Completed: the server requires an encryption or checksum algorithm the driver does not offer. Ask the DBA which ones are set and file an issue with the reason the dialog shows. TLS is the alternative: set an SSL mode instead.
Native Network Encryption Required: the server requires the negotiation but did not offer it on this connection. Ask the DBA to enable it for this client, or set an SSL mode and use TLS instead.
