DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • A Tool to Ease Your Transition From Oracle PL/SQLs to Couchbase JavaScript UDFs
  • Using AUTHID Parameter in Oracle PL/SQL
  • How to Use Self Join and WITH Clause in Oracle
  • Oracle Advanced Queue: A Guide

Trending

  • AI Agents Expose a Design Gap in Microservices Resilience Architecture
  • Dear Micromanager: Your Distrust Has a Job; It’s Just Not the One You’re Doing
  • Bridging Gaps in SOC Maturity Using Detection Engineering and Automation
  • The Cost of Knowing: When Observability Becomes the Outage
  1. DZone
  2. Data Engineering
  3. Databases
  4. PL/SQL Puzzle: What Code Can Be Removed?

PL/SQL Puzzle: What Code Can Be Removed?

This article takes a look at a PL/SQL puzzle and explores which lines of code can be removed from a code block and not affect the outcome of the program.

By 
Steven Feuerstein user avatar
Steven Feuerstein
·
Nov. 12, 19 · Analysis
Likes (2)
Comment
Save
Tweet
Share
21.9K Views

Join the DZone community and get the full member experience.

Join For Free

Image title

PL/SQL Puzzle

I published a PL/SQL puzzle on Twitter on November 6, 2019. I asked the following question:

Which lines of code can be removed (either entirely or in part) from the block below and not affect the output of the program in any way?

I neglected to mention in my original tweet a few important assumptions:

  1. You are running this code on Oracle Database 10g or higher
  2. The server output is turned on
  3. Whitespace (spaces, tabs, new-lines) don't count

Here's the code. I will publish it as an image, just as I did on Twitter, so you can give it a go yourself before taking a look at the answers from me and others below that.

Check out the Twitter conversation for all the answers that were submitted. It's a fun read!

Here are the full lines that I believe can be removed:

2 — There is no need to declare the iterator used in a FOR loop, numeric or cursor versions.

7 — There is no need to declare an "empty" collection to be used to initialize l_objects.

10 — Collections are empty after declaring, always. So no reason to delete.

12-15 — Invoking the LAST method on an empty collection always returns NULL, so that call too DBMS_OUTPUT.PUT_LINE will never happen.

17 — This line has no impact on the behavior of the program because SELECT-BULK COLLECT-INTO always wipes out whatever was in the target collection before filling it.

28 — You don't need (and shouldn't use) an EXIT statement inside a FOR loop. It will automatically terminate when all the index values in the collection have been touched.

And here are pieces of code that can be removed from remaining lines:

5 — We do not have to declare this as an associative array. We can remove "INDEX BY PLS_INTEGER", which makes it a nested table. A SELECT-BULK COLLECT-INTO always initializes and extends nested tables and varrays.

8 — ":= l_empty" There is no need to initialize a collection with an empty one. It is automatically set to that state.

In which case, the end result is nothing more than this:

DECLARE
   TYPE objects_t IS TABLE OF all_objects.object_name%TYPE;
   l_objects   objects_t;
BEGIN
     SELECT object_name
       BULK COLLECT INTO l_objects
       FROM all_objects
      WHERE object_name LIKE '%TABLE%'
   ORDER BY object_name;

   FOR indx IN 1 .. l_objects.COUNT
   LOOP
      DBMS_OUTPUT.put_line (l_objects (indx));
   END LOOP;
END;


You can run (and play around with) both versions on LiveSQL with this script.

Did I miss anything? Do you disagree with any of my removals?

Further Reading

PL/SQL — Don’t Mix and Match Scope

PL/SQL

Published at DZone with permission of Steven Feuerstein. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • A Tool to Ease Your Transition From Oracle PL/SQLs to Couchbase JavaScript UDFs
  • Using AUTHID Parameter in Oracle PL/SQL
  • How to Use Self Join and WITH Clause in Oracle
  • Oracle Advanced Queue: A Guide

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook