Saturday, 22 February 2025

SQLcl: The Modern Oracle Command-Line Tool You Need to Know About

 In the world of Oracle database management, command-line tools have always played a vital role. Traditionally, SQL*Plus was the go-to utility for interacting with Oracle databases from the terminal. But as technology evolved, Oracle introduced a more powerful, user-friendly, and feature-rich alternative: SQLcl (SQL Command Line).

If you're an Oracle developer, DBA, or even a casual user working with Oracle databases, SQLcl can significantly improve your productivity. In this blog post, we’ll explore what SQLcl is, why it’s worth using, and how it can streamline your database workflows.


🌟 What is SQLcl?

SQLcl is a modern command-line interface (CLI) provided by Oracle for working with Oracle databases. It offers everything SQL*Plus does but with more enhancements, better scripting support, and developer-friendly features.

Developed as part of the Oracle Database Utilities, SQLcl is lightweight, cross-platform, and supports powerful capabilities such as:

  • Command History: Navigate through previous commands easily.
  • Code Formatting: Automatically format your SQL code for readability.
  • Scripting Support: Run complex scripts with ease.
  • JSON and CSV Output: Export query results in modern data formats.
  • DML and DDL Generation: Quickly generate table structures and data.
  • REST Integration: Interact with Oracle REST Data Services (ORDS).

⚙️ Why Should You Use SQLcl?

Here are some compelling reasons why SQLcl stands out:

  1. Enhanced Productivity: With features like command history, tab completion, and syntax highlighting, working in SQLcl feels more intuitive compared to SQL*Plus.

  2. Data Export Made Simple: Export query results as CSV, JSON, or even SQL inserts with a single command.

  3. Built-in Liquibase Support: You can easily manage schema changes using the popular open-source tool Liquibase, integrated natively into SQLcl.

  4. Cross-Platform: Whether you're on Windows, macOS, or Linux, SQLcl works seamlessly.

  5. Smarter Scripting: The ability to use JavaScript alongside traditional SQL scripting expands what's possible from the command line.


How to Install SQLcl?

Installing SQLcl is straightforward:

  1. Download SQLcl:
    Get the latest version from Oracle's official website:
    👉 SQLcl Download Page

  2. Extract the Files:
    Unzip the downloaded file into a directory of your choice.

  3. Set Up Environment Variables (Optional but Recommended):

    • On Linux/macOS:
    • export PATH=$PATH:/path/to/sqlcl/bin

    • On Windows:
      • Add the sqlcl\bin directory to the system PATH.
    • Verify Installation:
      Open a terminal and run:

    • sql

Comparison: SQLcl vs. SQL*Plus

FeatureSQL*PlusSQLcl
Command History
Code Formatting
Export as JSON/CSV
REST Integration
Liquibase Support
Scripting (JavaScript)

Clearly, SQLcl offers a significant upgrade for Oracle users.

Conclusion: Why SQLcl Matters

SQLcl is more than just a replacement for SQL*Plus—it's a productivity powerhouse. Whether you're running ad-hoc queries, automating database tasks, or managing schema changes, SQLcl simplifies your workflow while adding modern features.

💡 Pro Tip: Combine SQLcl with shell scripting or automation tools like Ansible for even greater efficiency.





Setting up sqlcl in your macbook

 In this article you will learn how to setup sqlcl in your macbook -


Step 1) Download the zip file from below url -

https://www.oracle.com/in/database/sqldeveloper/technologies/sqlcl/download/


Step 2) Go to the destination now -


base) karandodwal@Karans-MacBook-Air Downloads % pwd

/Users/karandodwal/Downloads

(base) karandodwal@Karans-MacBook-Air Downloads % ls -ltr sqlcl-24.4.1.042.1221.zip

-rw-r--r--@ 1 karandodwal  staff  92394919 22 Feb 23:05 sqlcl-24.4.1.042.1221.zip


Step 3 ) Unzip the software now


 unzip sqlcl-24.4.1.042.1221.zip

Archive:  sqlcl-24.4.1.042.1221.zip

   creating: sqlcl/

   creating: sqlcl/bin/

   creating: sqlcl/lib/

   creating: sqlcl/lib/ext/

  inflating: sqlcl/NOTICES.txt

  inflating: sqlcl/lib/hk2-api.jar

  inflating: sqlcl/LICENSE.txt

  inflating: sqlcl/lib/javassist.jar

  inflating: sqlcl/THIRD-PARTY-LICENSES.txt

  inflating: sqlcl/lib/jersey-apache-connector.jar

  inflating: sqlcl/lib/sshd-contrib.jar

  inflating: sqlcl/24.4.1.042.1221

  inflating: sqlcl/lib/httpclient.jar

  inflating: sqlcl/bin/version.txt

  inflating: sqlcl/lib/httpcore.jar

  inflating: sqlcl/bin/dependencies.txt

  inflating: sqlcl/lib/jackson-datatype-jsr310.jar

  inflating: sqlcl/bin/sql

  inflating: sqlcl/lib/jackson-databind.jar

  inflating: sqlcl/bin/sql.exe

  inflating: sqlcl/lib/vavr-match.jar

  inflating: sqlcl/lib/oci-java-sdk-databasetools.jar

  inflating: sqlcl/lib/pom.xml

  inflating: sqlcl/lib/oci-java-sdk-common.jar

  inflating: sqlcl/lib/ext/dbtools-cpat.jar

  inflating: sqlcl/lib/oci-java-sdk-identity.jar

  inflating: sqlcl/lib/ext/cpat.jar

  inflating: sqlcl/lib/ext/dbtools-data.jar

  inflating: sqlcl/lib/ext/poi.jar

  inflating: sqlcl/lib/ext/poi-ooxml.jar

  inflating: sqlcl/lib/ext/poi-ooxml-lite.jar

  inflating: sqlcl/lib/ext/xmlbeans.jar

  inflating: sqlcl/lib/ext/commons-collections4.jar

  inflating: sqlcl/lib/ext/log4j-api-2.20.0.jar

  inflating: sqlcl/lib/ext/log4j-core-2.20.0.jar

  inflating: sqlcl/lib/ext/dbtools-datapump.jar

  inflating: sqlcl/lib/ext/dbtools-apex.jar

  inflating: sqlcl/lib/vavr.jar

  inflating: sqlcl/lib/ext/commons-lang3.jar

  inflating: sqlcl/lib/ext/text-tree.jar

  inflating: sqlcl/lib/bcpkix-jdk15to18.jar

  inflating: sqlcl/lib/ext/commons-text.jar

  inflating: sqlcl/lib/sshd-sftp.jar

  inflating: sqlcl/lib/ext/json-flattener.jar

  inflating: sqlcl/lib/bcprov-jdk15to18.jar

  inflating: sqlcl/lib/ext/json-base.jar

  inflating: sqlcl/lib/resilience4j-circuitbreaker.jar

  inflating: sqlcl/lib/ext/commons-compress.jar

  inflating: sqlcl/lib/ext/commons-codec.jar

  inflating: sqlcl/lib/ext/opencsv.jar

  inflating: sqlcl/lib/ext/snakeyaml.jar

  inflating: sqlcl/lib/ext/dbtools-liquibase.jar

  inflating: sqlcl/lib/ext/liquibase-core.jar

  inflating: sqlcl/lib/ext/dbtools-dg.jar

  inflating: sqlcl/lib/resilience4j-core.jar

  inflating: sqlcl/lib/ext/dbtools-aq.jar

  inflating: sqlcl/lib/ext/dbtools-blockchain.jar

  inflating: sqlcl/lib/sshd-scp.jar

  inflating: sqlcl/lib/ext/dbtools-modeler-cli-ext.jar

  inflating: sqlcl/lib/oci-java-sdk-secrets.jar

  inflating: sqlcl/lib/ext/dbtools-modeler-common.jar

  inflating: sqlcl/lib/ext/dbtools-jobs.jar

  inflating: sqlcl/lib/oci-java-sdk-bastion.jar

  inflating: sqlcl/lib/ext/dbtools-copy.jar

  inflating: sqlcl/lib/sshd-osgi.jar

  inflating: sqlcl/lib/ext/dbtools-sqlcl-awr-extension.jar

  inflating: sqlcl/lib/oci-java-sdk-workrequests.jar

  inflating: sqlcl/lib/ext/pushd-popd-dirs.jar

  inflating: sqlcl/lib/sshd-putty.jar

  inflating: sqlcl/lib/ext/dbtools-project.jar

  inflating: sqlcl/lib/ext/org.eclipse.jgit.jar

  inflating: sqlcl/lib/ext/dbtools-mdb.jar

  inflating: sqlcl/lib/ext/ucanaccess.jar

  inflating: sqlcl/lib/ext/jackcess.jar

  inflating: sqlcl/lib/ext/hsqldb.jar

  inflating: sqlcl/lib/ext/dbtools-mle-command-extension.jar

  inflating: sqlcl/lib/dbtools-sqlcl.jar

  inflating: sqlcl/lib/xmlparserv2_sans_jaxp_services.jar

  inflating: sqlcl/lib/antlr-runtime.jar

  inflating: sqlcl/lib/antlr4-runtime.jar

  inflating: sqlcl/lib/jakarta.json-api.jar

  inflating: sqlcl/lib/parsson.jar

  inflating: sqlcl/lib/dbtools-core.jar

  inflating: sqlcl/lib/ojdbc11.jar

  inflating: sqlcl/lib/xdb.jar

  inflating: sqlcl/lib/dbtools-arbori.jar

  inflating: sqlcl/lib/sqlcl-jline.jar

  inflating: sqlcl/lib/jansi.jar

  inflating: sqlcl/lib/jline.jar

  inflating: sqlcl/lib/dbtools-net.jar

  inflating: sqlcl/lib/jackson-annotations.jar

  inflating: sqlcl/lib/jackson-core.jar

  inflating: sqlcl/lib/jackson-jr-objects.jar

  inflating: sqlcl/lib/jackson-jr-stree.jar

  inflating: sqlcl/lib/low-level-api.jar

  inflating: sqlcl/lib/dbtools-common.jar

  inflating: sqlcl/lib/ucp11.jar

  inflating: sqlcl/lib/guava.jar

  inflating: sqlcl/lib/orai18n.jar

  inflating: sqlcl/lib/orai18n-utility.jar

  inflating: sqlcl/lib/orai18n-mapping.jar

  inflating: sqlcl/lib/oraclepki.jar

  inflating: sqlcl/lib/ST4.jar

  inflating: sqlcl/lib/orajsoda.jar

  inflating: sqlcl/lib/commons-io.jar

  inflating: sqlcl/lib/dbtools-http.jar

  inflating: sqlcl/lib/slf4j-jdk14.jar

  inflating: sqlcl/lib/slf4j-api.jar

  inflating: sqlcl/lib/httpclient5.jar

  inflating: sqlcl/lib/httpcore5.jar

  inflating: sqlcl/lib/httpcore5-h2.jar

  inflating: sqlcl/lib/dbtools-oci.jar

  inflating: sqlcl/lib/oci-java-sdk-common-httpclient-jersey3.jar

  inflating: sqlcl/lib/oci-java-sdk-common-httpclient.jar

  inflating: sqlcl/lib/jakarta.ws.rs-api.jar

  inflating: sqlcl/lib/oci-java-sdk-database.jar

  inflating: sqlcl/lib/jakarta.annotation-api.jar

  inflating: sqlcl/lib/jersey-common.jar

  inflating: sqlcl/lib/jakarta.inject-api.jar

  inflating: sqlcl/lib/osgi-resource-locator.jar

  inflating: sqlcl/lib/jersey-client.jar

  inflating: sqlcl/lib/jersey-media-json-jackson.jar

  inflating: sqlcl/lib/hk2-utils.jar

  inflating: sqlcl/lib/jersey-entity-filtering.jar

  inflating: sqlcl/lib/oci-java-sdk-circuitbreaker.jar

  inflating: sqlcl/lib/jcl-over-slf4j.jar

  inflating: sqlcl/lib/jdbcrest.jar

  inflating: sqlcl/lib/jackson-module-jakarta-xmlbind-annotations.jar

  inflating: sqlcl/lib/jakarta.activation.jar

  inflating: sqlcl/lib/jakarta.xml.bind-api.jar

  inflating: sqlcl/lib/jersey-hk2.jar

  inflating: sqlcl/lib/hk2-locator.jar

  inflating: sqlcl/lib/aopalliance-repackaged.jar

  inflating: sqlcl/lib/eddsa.jar


Step 4) launch sqlcl now, make sure your path is correct i.e - /Users/karandodwal/git/sql/sqlcl/bin should be the value of the $PATH -


% echo $PATH

/Users/karandodwal/git/sql/sqlcl/bin


Step 5) Launch sqlcl now with command sql , the key thing to note us sql is command because in the bin folder you will see sql file as an executable as -


 cd /Users/karandodwal/git/sql/sqlcl/bin

(base) karandodwal@Karans-MacBook-Air bin % ls -ltr

total 416

-rwxr-xr-x@ 1 karandodwal  staff   29954 11 Feb 12:20 sql

-rw-r-----@ 1 karandodwal  staff     152 11 Feb 12:23 version.txt

-rw-r-----@ 1 karandodwal  staff    3704 11 Feb 12:23 dependencies.txt

-rwxr-xr-x@ 1 karandodwal  staff  169984 11 Feb 12:24 sql.exe

-rw-------@ 1 karandodwal  staff       0 22 Feb 23:10 history.log


Now fire the sql command with ./sql or sql as our path is already sorted above.

(base) karandodwal@Karans-MacBook-Air ~ % sql

SQLcl: Release 24.4 Production on Sun Feb 23 00:07:50 2025


Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Username? (''?)


# In the next article you will learn how to connect to autonomous database using sqlcl, stay tuned.