Oracle SQLcl 23.4.0 Release Notes

January 2024

SQLcl on OTN | Getting Started Video | Downloads | FAQ | Forum


You are supported by Oracle Support under your current Oracle Database Support license.

Log Oracle SQLcl bugs and issues using My Oracle Support. To determine the version of SQLcl run this command: sql -version


Getting Started

Documentation on getting started with SQLcl is provided on the website. Click here, select your release version, and access the book titled 'Get Started' under ‘Learn About Oracle SQLcl Release’.


  • Supported Java Version
    • Oracle SQLcl requires Java 11 or 17. The supported Java Runtime Environments are:
      • Oracle Java 11
      • Oracle Java 17
      • Oracle GraalVM Enterprise Edition for Java 11
      • Oracle GraalVM Enterprise Edition for Java 17
  • JavaScript support requires Oracle Java 11 or GraalVM for Java 17 with the JavaScript Runtime Plugin
  • Liquibase support for APEX requires APEX version 18 and above.

New Features in 23.4.0

  • Updated the underlying open-source Liquibase version from 4.18 to 4.24 for SQLcl's Oracle enhanced Liquibase commands
    • Schema Names in Liquibase Changelogs Tokenized In 23.4 and Moving Forward:
      • In order to properly support the schema possibilities that can be used by the changeset section of a changelog, it became necessary to tokenize the schema name stored in changesets through the format %USER_NAME% in SQLcl 23.4 and moving forward. This tokenization allows for the proper setting of the schema name when generating the database object data definition language (DDL) and avoids edge case complications.
      • For changelogs you have generated prior to 23.4, in order for them to be fully supported in 23.4 and beyond, you will either need to regenerate these changelogs in SQLcl 23.4 or a future version or manually alter your changelogs with %USER_NAME% as so:
        • For changelogs with the <SCHEMA></SCHEMA> XML element, replace the content inside with %USER_NAME%
          • Example: <SCHEMA>%USER_NAME%</SCHEMA>
      • For changelogs that utilize SQL within the CDATA field, attach "%USER_NAME%". to the front of all database object references. If a schema name is in these locations, replace it with "%USER_NAME%".
      • The need for these alterations are only necessary if you are changing schema names between your export and import.
    • The new alias search command allows you to search for aliases and return a resulting list in the syntax of alias search [search string]. The search string will check the contents of your aliases’ name, description, and query.
      • To learn more use the help alias search command in SQLcl
    • Aliases that ship with SQLcl have been updated to have nulldefaults set to on by default for bind arguments. For user defined aliases, the user still needs to include the -nulldefaults optional parameter when creating their alias for this to be set to on
      • When using an alias, null defaults sets internal binds to NULL where a bind is not declared
    • Introduced command completion for SQLcl commands. Press TAB while typing to autocomplete command names, show available parameters, and cycle through parameter options. First wave of commands with code completion functionality:
      • Alias [ALIAS]
      • APEX [APEX]
      • Advanced Queuing [AQ]
      • Background [BACKGROUND]
      • Connect [CONNECT]
      • Connection Manager [CONNMGR]
      • Jobs [JOBS]
      • Liquibase [LIQUIBASE]
      • Migration Advisor [MIGRATEADVISOR]
      • Secret [SECRET]
    • For the Liquibase functionality, capturing tables with foreign key constraints now creates two changelog files: a table changelog and a ref_constraint changelog containing the foreign key constraint. This change improves changelog sorting and performance.

    Issues Fixed in 23.4.0

    There have been many issues fixed in this quarterly release. The main ones of note are:

    • Thick Driver Support - Changed -oci to -thick on commandline. sql -thick <url>
    • MKStore command upgraded to removed Java SecurityManager restriction
    • JDBC upgraded to
    • SQLCL now checks for java in this order: Embedded JRE > JAVAHOME > $ORACLEHOME > PATH
    • SQLCL checks Java version when using $ORACLE_HOME before loading thick client jars
    • TNSAdmin search order fixed to: $HOME > $CWD > (windows registry) > $ORACLE_HOME
    • SQL Parser fully supports Database 23c updated syntax
    • SQL Error positions now correctly reported
    • Help for commands now standardized to help <command>
    • liquibase update -changelog-file controller.xml fails to update table object at target if constraints are deleted at source
    • SQLcl liquibase changelog tables showing in the controller if they are renamed
    • SQLcl liquibase removing schema name from strings inside pl/sql objects
    • liquibase generate-schema can fail to order scripts correctly based on dependency; e.g. w/ popular logger_user
    • Generated trigger SQL file create invalid trigger due to enable trigger statement at the end
    • liquibase update fails with npe when the user has the binary_ci default collation
    • liquibase generate-apex-object adds spaces to trigger code
    • liquibase update overwrites sequences
    • SQLcl Liquibase default search path should include the directory in which Liquibase is run
    • liquibase generate-apex-object command not placing apex_install.xml in the specified directory when using the -dir parameter
    • liquibase generate-schema fails to give an error message when the -filter parameter is used with an invalid filter


    This section describes the restrictions on use that upgrading has introduced.

    ORACLE_HOME usage

    When using SQLcl in an ORACLE_HOME, it must be a minimum version of 21c.


    At the SQLcl product page on, you will find links to forums and social media channels where you can discuss topics with the SQLcl community around the world and leave feedback for the development team.

    In the forum, be sure to use clear subject lines to initiate a thread. Provide a complete and clear description of the issue, including steps to reproduce the issue.

    Try to avoid using old, unrelated threads for a new issue.