Time to do the downloading!

Let’s do a quick overview of what you have to look forward to…and as always, we’ll do deep dives on features over the next few days and weeks.


This release is mostly bug fixes, but there are few new things to look forward to.

Getting the execution plan and stats of a query…without having to scroll through all the query results.

set autotrace trace explain

So, I don’t need to look at the 107 rows, I can just look at the performance information. If you like this, tip your friendly @oraclebase, he asked for it 🙂

The other new feature is the ability to additionally generate SQL scripts when using the Liquibase (lb) command for generating changeLogs on a schema.

There’s a -sql flag you can take advantage of.

lb genschema -sql

This will make your DIFFs much easier to parse with your human eyes, and again, was requested by MANY of our SQLcl community, so thanks for that feedbac!

And remember..you can download these directly now, no clicking through EULAs or signing in with your Oracle SSO! For ORDS, you can get these via Yum (SQLcl is coming soon as well).

SQL Developer Web / Database Actions

From charts…we now have dashboards!

A dashboard is composed of one or more charts, up to 8.

Again, many more details to follow, but one important thing, that also follows over to REST Development. Charts and REST APIs will require you to explicitly say you want your endpoints UNPROTECTED.

So basically, no more accidentally forgetting to secure a REST API.

This feature, Charts (which includes dashboards), will be included in the Autonomous Shared services in the Oracle Cloud.

Required, must select a privilege or must explicitly say ‘Not Protected’ before creating your Chart.

Speaking of REST…

Better support for Implicit and Explicit Parameters in your Handler code blocks is now here:

Less typing, less alt-tabbing to the Docs, win-win.

And ORDS itself…?

Just bug fixes for the most part. 21.4 will be a quick release cycle so again won’t be much in way of new features. But, 22.1 on the other hand will see lots of fundamental changes…around Java, our installer, and more. Stay tuned for an updated Statement of Direction for ORDS and all of our DBTools.

For SQLcl, I guess I can tease we’re building Data Pump and Data Guard commands.


I'm a Distinguished Product Manager at Oracle. My mission is to help you and your company be more efficient with our database tools.


  1. AlexanderS Reply

    Hi Jeff,
    unfortunately, the command “lb genschema” does not work for me. I’m getting a unique contraint when a liquibase procedure tries to insert into a liquibase table. Is a bug fix in the pipeline to address this issue?

    • “I’m getting a unique contraint when a liquibase procedure tries to insert into a liquibase table.”

      I’m not aware of this issue. Can you supply the complete error message/stack?

    • AlexanderS

      Of course. This is what i get.

      “java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (MY_SCHEMA.DATABASECHANGELOG_EXPORT_PK) violated

      at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:628)
      at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:562)
      at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1145)
      at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:726)
      at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:291)
      at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:492)
      at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:148)
      at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1038)
      at oracle.jdbc.driver.OracleStatement.executeSQLStatement(OracleStatement.java:1507)
      at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1287)
      at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3735)
      at oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePreparedStatement.java:3910)
      at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3889)
      at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:992)
      at oracle.dbtools.raptor.liquibase.generator.SchemaGenerator.insertCommentCaptureTable(SchemaGenerator.java:901)
      at oracle.dbtools.raptor.liquibase.generator.SchemaGenerator.processCaptureTable(SchemaGenerator.java:1070)
      at oracle.dbtools.raptor.liquibase.generator.SchemaGenerator.doSchemaExport(SchemaGenerator.java:186)
      at oracle.dbtools.raptor.scriptrunner.commands.liquibase.LiquibaseActions.genDbSchemaWork(LiquibaseActions.java:545)
      at oracle.dbtools.raptor.scriptrunner.commands.liquibase.liquibaseCommand.handleEvent(liquibaseCommand.java:206)
      at oracle.dbtools.raptor.newscriptrunner.CommandRegistry.fireListeners(CommandRegistry.java:346)
      at oracle.dbtools.raptor.newscriptrunner.ScriptRunner.run(ScriptRunner.java:226)
      at oracle.dbtools.raptor.newscriptrunner.ScriptExecutor.run(ScriptExecutor.java:344)
      at oracle.dbtools.raptor.newscriptrunner.ScriptExecutor.run(ScriptExecutor.java:227)
      at oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli.processLine(SqlCli.java:337)
      at oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli.runSqlcl(SqlCli.java:1056)
      at oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli.main(SqlCli.java:364)
      Caused by: Error : 1, Position : 0, Sql = insert into DATABASECHANGELOG_EXPORT (rank,type,seq,meta,file_name,object_name) values (:rank,:type,:seq,:meta,:filename,:object_name), OriginalSql = insert into DATABASECHANGELOG_EXPORT (rank,type,seq,meta,file_name,object_name) values (:rank,:type,:seq,:meta,:filename,:object_name), Error Msg = ORA-00001: unique constraint (MY_SCHEMA.DATABASECHANGELOG_EXPORT_PK) violated

      at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:632)
      … 25 more

    • Hi Jeff,
      there seems to be a change in SQLcl 21.4.x based on https://community.oracle.com/tech/developers/discussion/4490536/lb-genschema-leads-to-unique-constraint-error, but the problem already occurs.

      I added a new comment in the thread https://community.oracle.com/tech/developers/discussion/4490536/lb-genschema-leads-to-unique-constraint-error where I investigated the problem. In my case it seems to be related to column comments on different objects with identical column names.

  2. Hi Jeff,
    Regarding SQLcl:
    I would like to have a parameter for dataload WITHOUT column names having to be in the 1st line.
    Simply load the columns in the order they are in the txt/csv file.
    Often delivered or generated txt files have no header information at all and you still know how to handle them (you know the target table AND the source file structures and that they must match.)
    No joke, I really hav such use case and have (yet) to “construct” the first line (column names) by concat a “default” file and the data file. ugly…
    Thank you in advance!

  3. Rajeshwaran Jeyabal Reply

    Hi Jeff thanks for the update, how about SQL Developer 21.3 is that coming soon ?

Write A Comment