Welcome to plsql4all.blogspot.com SQL, MYSQL, ORACLE, TERADATA, MONGODB, MARIADB, GREENPLUM, DB2, POSTGRESQL.

Tuesday, 26 August 2014

DBMS_LOCK.SLEEP in Oracle

In Oracle, the DBMS_LOCK.SLEEP procedure is used to make a session sleep for a specified period of time. This can be useful in various scenarios such as delaying the execution of certain tasks or implementing wait logic in PL/SQL code. The syntax for using DBMS_LOCK.SLEEP is as follows:


DBMS_LOCK.SLEEP(seconds);


Here, seconds is the number of seconds for which the session will sleep. The session will remain inactive for the specified duration before resuming execution. It's important to note that the DBMS_LOCK.SLEEP procedure is typically used in PL/SQL code rather than in SQL queries.

here's a real-life example of how you might use DBMS_LOCK.SLEEP in Oracle:

Let's say you have a scenario where you need to implement a delay between certain operations in a PL/SQL procedure. For instance, you're developing a batch processing system where you need to wait for a specific amount of time between processing each record to avoid overwhelming a downstream system.

Here's how you might use DBMS_LOCK.SLEEP in this scenario:


DECLARE
    v_record_count NUMBER := 100; -- Number of records to process
    v_processing_delay_seconds NUMBER := 5; -- Delay between processing each record (in seconds)
BEGIN
    FOR i IN 1..v_record_count LOOP
        -- Process the record
        -- Some processing logic here
        
        -- Wait for the specified delay before processing the next record
        DBMS_LOCK.SLEEP(v_processing_delay_seconds);
    END LOOP;
END;
/


In this example, before processing each record within the loop, the PL/SQL code calls DBMS_LOCK.SLEEP to pause the execution for 5 seconds. This delay ensures that each record is processed with a gap of 5 seconds between them, allowing for better control over the processing rate. This can be useful in scenarios where you need to avoid overloading external systems or resources.
Please provide your feedback in the comments section above. Please don't forget to follow.